标签:
这个是UIViewController实现代码
//导入框架 import UIKit //文件的入口,也就是主要编辑程序的地方 class ViewController: UIViewController { override func viewDidLoad() { //调用父累加载方法 super.viewDidLoad() //设置轮播图的frame,let在swift里面是标示常量,这个常量和OC的常量不一样,这里标示的是不变的量,let可以存储对象类型 let frame = CGRectMake(0, 20, view.bounds.width, view.bounds.width*0.6) //这个let就是不变数组 let imageView = ["2.jpg","3.jpg","4.jpg"] //在swift里面创建view很简单,直接调用view方法传递参数即可 let loopView = AdLoopView(frame: frame, images: imageView, autoPlay: true, delay: 3, isFromNet: false) //添加代理没有发生变化 loopView.delegate = self //添加视图方法,基本和OC没有变化 view.addSubview(loopView) /* 从这些里面我们就可以看出swift的语言保持了OC的语法命名规则,对于OC的开发攻城狮是个福音,调用方法很简单 方法名(有参数传参即可) */ } } //这个是此controller遵循代理方法 关键字在extension ,extension的作用是给此文件添加扩展,此扩展即使OC中的扩展 extension ViewController : AdLoopViewDelegate{ //方法命名规则,这个是代理方法,代理方法的命名规则和方式和OC相差不多 func adLoopView(adLoopView: AdLoopView, IconClick index: NSInteger) { print(index) } }
view实现的文件
private var currentImages : NSMutableArray?{ //NAMutableArray的get方法 get{ currentImgs.removeAllObjects() //let常量 !表示images数组里面肯定有值 let count = self.images!.count var i = NSInteger (self.currentPage! + count - 1 )%count currentImgs.addObject(self.images![i]) currentImgs.addObject(self.images![self.currentPage!]) i = NSInteger(self.currentPage!+1) % count currentImgs.addObject(self.images![i]) //返回值 return currentImgs } } //private 修饰此变量只能此文件使用 var是表示变量值可以改变 ? 表示此变量可以为空值或有值 private var images:NSArray? //BOOL 类型发生改变不在是YES/NO 而是 true/false private var autoPlay :Bool? private var isFromNet :Bool? private var delay : NSTimeInterval? //创建代理变量 var delegate : 协议名称? var delegate : AdLoopViewDelegate? //override 标示含父类init方法前缀 override init(frame: CGRect) { super.init(frame: frame) }
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } //convenience修饰本类的init函数 convenience init(frame:CGRect, images : NSArray, autoPlay:Bool ,delay:NSTimeInterval , isFromNet:Bool){ self.init(frame :frame) self.images = images self.autoPlay = autoPlay self.isFromNet = isFromNet self.delay = delay self.currentPage = 0 createImageScrollView() createPageView() //if判断和CO的语法格式没有变化,相对于OC还是简化了,在swift里面没有延续OC 0假 1真 if images.count < 2 { self.autoPlay = false pageControl?.hidden = true } if self.autoPlay == true { startAutoPlay() } }
//此for条件0..<3 意思是0到3其中包括0 1 2 不包括3 for index in 0..<3 { let imageView = UIImageView(frame:CGRectMake(self.bounds.width*CGFloat(index), 0, self.bounds.width, self.bounds.height)) imageView.userInteractionEnabled = true imageView.addGestureRecognizer(UITapGestureRecognizer(target:self,action: #selector(AdLoopView.imageViewClick))) if self.isFromNet == true { }else{ imageView.image = UIImage(named: self.currentImages![index] as! String); } imageScrollView?.addSubview(imageView) }
//as! 表示软弱型 as?是强转型 imageView.image = UIImage(named: self.currentImages![i] as! String);
//扩展 履行UIScrollViewDelegate方法 extension AdLoopView :UIScrollViewDelegate{ //UIScrollView 代理方法 func scrollViewDidEndDecelerating(scrollView: UIScrollView) { scrollView.setContentOffset(CGPointMake(self.frame.width, 0), animated: true) } //UIScrollView 代理方法 func scrollViewDidScroll(scrollView: UIScrollView) { let x = scrollView.contentOffset.x let width = self.frame.width if x >= 2 * width { currentPage = (currentPage!+1) % self.images!.count pageControl!.currentPage = currentPage! refreshImages() } if x <= 0 { currentPage = (currentPage!+self.images!.count-1) % self.images!.count pageControl!.currentPage = currentPage! refreshImages() } } }
//自定义代理方法 前缀使用@objc protocol 代理名称:和遵循的协议{代理方法} @objc protocol AdLoopViewDelegate:NSObjectProtocol { func adLoopView(adLoopView:AdLoopView ,IconClick index:NSInteger) }
今天就到这里吧...改天再学学
标签:
原文地址:http://www.cnblogs.com/wisdom-yao/p/5379947.html