大佬教程收集整理的这篇文章主要介绍了swift 广告轮播图,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import UIKit import Kingfisher class BAnnerView: UIView,UIScrollViewDelegate{ enum ImageType{ case Image //本地图片 case URL //URL } //图片水平放置到scrollView上 private var scrollView:UIScrollView = UIScrollView() //小圆点标识 private var pageControl:UIPageControl = UIPageControl() private var center_image:UIImageView = UIImageView() private var first_image:UIImageView = UIImageView() private var second_image:UIImageView = UIImageView() //图片集合 private var images:Array<@R_674_10495@ng> = [] private var type:ImageType = .Image private var width:CGFloat = 0 private var height:CGFloat = 0 private var currIndex = 0 private var clickBlock :(int)->Void = {index in} private var timer:Timer? // 默认自动播放 设置为false只能手动滑动 var isAuto = true // 轮播间隔时间 默认4秒可以自己修改 var interval:Double = 4 override func layoutSubviews() { super.layoutSubviews() // self.initLayout() } public func setImages(images:Array<@R_674_10495@ng>,type:ImageType = .Image,imageClickBlock:@escaping (int) -> Void) { self.type = type self.images = images self.clickBlock = imageClickBlock self.initLayout() } private func initLayout(){ if(self.images.count == 0){ return } width = frame.size.width height = frame.size.height scrollView.frame = self.bounds scrollView.contentSize = CGSize(width:width * CGFloat(3),height:height) scrollView.contentOffset = CGPoint(x:width,y:0) scrollView.isUserInteractionEnabled = true scrollView.isPagingEnabled = true scrollView.showsHorizontalScrollInDicator = false scrollView.delegate = self addSubview(scrollView) first_image.frame = CGRect(x:0,y:0,width:width,height:height) first_image.contentMode = .scaleAspectFill first_image.isUserInteractionEnabled = true scrollView.addSubview(first_imagE) center_image.frame = CGRect(x:width,height:height) center_image.contentMode = .scaleAspectFill center_image.isUserInteractionEnabled = true scrollView.addSubview(center_imagE) second_image.frame = CGRect(x:width * 2.0,height:height) second_image.contentMode = .scaleAspectFill second_image.isUserInteractionEnabled = true scrollView.addSubview(second_imagE) pageControl.center = CGPoint(x:width/2,y:height - CGFloat(15)) pageControl.isEnabled = true pageControl.numberOfPages = images.count pageControl.currentPageInDicatorTintColor = UIColor.green pageControl.pageInDicatorTintColor = UIColor.gray pageControl.isUserInteractionEnabled = false addSubview(pageControl) //当前显示的只有 center_image 其他两个只是用来增加滑动时效果而已,不需要添加点击事件 addTapGesWithImage(image: center_imagE) if(isAuto){ openTimer() } setCurrent(currIndex: 0) } func setCurrent(currIndex:int) { self.currIndex = currIndex if(type == .ImagE){ center_image.image = UIImage.init(named:images[currIndex]) first_image.image = UIImage.init(named:images[(currIndex - 1 + images.count) % images.count]) second_image.image = UIImage.init(named:images[(currIndex + 1) % images.count]) }else{ center_image.setMyImage(URL: NSURL(@R_674_10495@ng: images[currIndex])) first_image.setMyImage(URL: NSURL(@R_674_10495@ng: images[(currIndex - 1 + images.count) % images.count])) second_image.setMyImage(URL: NSURL(@R_674_10495@ng: images[(currIndex + 1) % images.count])) } center_image.tag = currIndex pageControl.currentPage = currIndex scrollView.setContentOffset(CGPoint(x:width,y:0),animated: false) } //给图片添加点击手势 private func addTapGesWithImage(image:UIImageView) { let tap = UITapGestureRecognizer(target: self,action: #SELEctor(tap(_:))) image.isUserInteractionEnabled = true //让控件可以触发交互事件 image.contentMode = .scaleAspectFill image.clipsToBounds = true //超出父控件的部分不显示 image.addGestureRecognizer(tap) } //点击图片,调用block @objc func tap(_ ges:UITapGestureRecognizer) { clickBlock((ges.view?.tag)!) } func scrollViewDidScroll(_ scrollView: UIScrollView) { } func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { closeTimer() } func scrollViewDidEndDragging(_ scrollView: UIScrollView,willDecelerate decelerate: Bool) { openTimer() } func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { if(scrollView.contentOffset.x > 0){ currIndex = (currIndex + 1) % images.count }else{ currIndex = (currIndex - 1 + images.count) % images.count } setCurrent(currIndex: currIndeX) } func openTimer(){ if(isAuto){ timer = Timer.scheduledTimer(timeInterval: interval,target: self,SELEctor: #SELEctor(startAutoScroll),userInfo: nil,repeats: true) } } func closeTimer(){ if(timer != nil){ timer?.invalidate() timer = nil } } @objc func startAutoScroll(){ if(isDisplayInScreen()){ setCurrent(currIndex: (currIndex + 1) % images.count) } } func isDisplayInScreen() -> Bool{ if(self.window == nil){ return false } return true } } extension UIImageView{ // Kingfisher的覆盖 好处:1.不用所有界面都去导入 2.如果KingfisherAPI更新或者更换图片加载库可以更方便一些,保持方法名和第一个参数不变,修改一下就能达到目的,比如修改为使用SDWebImage public func setMyImage(URL: NSURL?,placeholderImage: Image? = nil,optionsInfo: KingfisherOptionsInfo? = nil,progressBlock: DownloadProgressBlock? = nil,completionHandler: CompletionHandler? = nil){ kf.setImage(with: URL as? resource,placeholder: placeholderImage,options: optionsInfo,progressBlock: progressBlock,completionHandler: completionHandler) } }
使用方法
@H_682_403@@IBOutlet@H_506_404@ @H_682_403@weak@H_506_404@ @H_682_403@var@H_506_404@ bAnnerView: BAnnerView!
bAnnerView.setImages(images: ["ad01.jpg","ad02.jpg","ad03.jpg","ad04.jpg"]){ (indeX) @H_682_403@in@H_506_404@
print(indeX)
}
以上是大佬教程为你收集整理的swift 广告轮播图全部内容,希望文章能够帮你解决swift 广告轮播图所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。