仿SDCycleScrollView(Swift版本)
废话不多说,在开发中,cycleScrollView是经常要用到的一个控件,以下是我封装的一个cycleScrollview的swift版本cycleScrollView+timer(GIT地址)
核心代码
/**
* 配置轮播数据源
*/
var newImageUrlStrings: [String] = imageUrlStrings
if imageUrlStrings.count > 1 {
newImageUrlStrings.insert(imageUrlStrings.last!, at: 0)
newImageUrlStrings.append(imageUrlStrings.first!)
}
for imageUrlStrig in newImageUrlStrings {
let tmpImageView = UIImageView.init(frame: CGRect.init(x: x, y: 0, width: mFrame.width, height: mFrame.height))
tmpImageView.tag = imageUrlStrings.index(of: imageUrlStrig)!
self.mScrollView.addSubview(tmpImageView)
/**
* 设置数据源
*/
tmpImageView.kf.setImage(with: URL.init(string: imageUrlStrig), placeholder: mPlaceholderImage, options: nil, progressBlock: { (a, b) in
}, completionHandler: { (image, error, cacheType, url) in
})
/**
* 添加图片点击事件
*/
tmpImageView.isUserInteractionEnabled = true
tmpImageView.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: #selector(self.didSelectImageView(tap:))))
x+=mFrame.width
}
self.mPage.numberOfPages = imageUrlStrings.count
self.mScrollView.contentSize = CGSize.init(width: mFrame.width * CGFloat(newImageUrlStrings.count), height: mFrame.height)
if newImageUrlStrings.count > 0 {
mScrollView.scrollRectToVisible(CGRect.init(origin: CGPoint.init(x: mScrollView.frame.width, y: mScrollView.frame.origin.y), size: mScrollView.frame.size), animated: false)
}
self.startTimer()
因为swift最新版本提供的定时器只支持10.0以上版本,为了兼容低版本系统,Demo中也同时封装了一个定时器的类(通过GCD实现的),并且使用的API和系统相近。
如有错误,希望不吝指出共勉。