Swift 3.0 实现图片轮播器
一般手机App中都有轮播图的功能,最近学习Swift,就用Swift重新写了图片轮播器。
图片轮播器的实现方法一般分为两种:一种是用三张图片,通过改变显示的数据源来达到轮播的效果;另一种是通过在数据源的起始和结束位置分别插入数据源的最后一个元素和第一个元素,通过多增加的数据来达到轮播效果。第二种方法,本人认为太浪费性能,虽然也能实现轮播的效果,但是不建议使用,今天主要介绍第一种的实现原理和实现效果。
废话不多说,直接上代码
**定义PageControl显示样式**
enum UIPageControlShowStyle {
case UIPageControlShowStyleNone // 不显示(默认值)
case UIPageControlShowStyleLeft // 左侧
case UIPageControlShowStyleCenter // 中间
case UIPageControlShowStyleRight // 右侧
}
在Swift中回调可以使用代理和闭包两种方法
定义点击回调的代理方法
protocol AdViewDelegate:NSObjectProtocol {
func callBack(_ index:NSInteger)
}
类的主要实现代码
class AdView: UIView,UIScrollViewDelegate {
fileprivate var moveTimer:Timer? // 私有可选型变量定时器
// 懒加载有以下两种写法,如果没有特殊操作,建议使用第一种
fileprivate lazy var adScrollView: UIScrollView = UIScrollView() // 私有懒加载变量滚动视图
fileprivate lazy var pageControl: UIPageControl = { // 私有懒加载变量pageControl
let page = UIPageControl()
return page
}()
var dataArray:[String]? { // 数据源数组(一般传模型对象数组)
didSet{ // 设置完成后调用
if dataArray != nil && (dataArray?.count)!>1 {
adScrollView.isScrollEnabled = true
leftImageIndex = dataArray!.count-1
centerImageIndex = 0
rightImageIndex = 1
leftImageView?.image = UIImage(named:dataArray![leftImageIndex])
centerImageView?.image = UIImage(named: dataArray![centerImageIndex])
rightImageView?.image = UIImage(named: dataArray![rightImageIndex])
startTime()
pageControl.numberOfPages = dataArray!.count
if pageControlShowStyle == .UIPageControlSho