一 前言
1.之前一直在用OC编程,最近才开始接触使用swift就发现使用OC越来越不习惯,感觉已经爱上了swift。
2.这个自定义轮播图只是对之前OC版本进行了翻译,欢迎指正。
3.我决定一步步适应swift编程,首先从翻译原来的代码开始。
好啦,马上附上文件记录
let SW = UIScreen.mainScreen().bounds.size.width let SH = UIScreen.mainScreen().bounds.size.height
1 import Foundation 2 import UIKit 3 4 5 class ZLScrollView: UIView ,UIScrollViewDelegate { 6 7 var scrollview :UIScrollView! 8 var pageControl :UIPageControl! 9 var pageBgView :UIImageView! 10 var pageCount :NSInteger! 11 12 var imageArray :NSArray! 13 14 var leftImage :UIImageView! 15 var centerImage :UIImageView! 16 var rightImage :UIImageView! 17 18 var timer :NSTimer! 19 var isAutoMove :Bool! 20 21 var urlsArray :NSArray! 22 23 var selfHeight :CGFloat! 24 25 override init(frame: CGRect) { 26 27 super.init(frame: frame) 28 29 self.frame=frame 30 31 selfHeight=frame.size.height 32 33 pageCount=0 34 35 createScrollView() 36 } 37 38 func initWithImage(array images : NSArray, array urls : NSArray ) { 39 40 urlsArray=urls 41 42 if images.count==0 { 43 return 44 } 45 imageArray=NSArray.init(array: images) 46 47 if imageArray.count==1 { 48 pageBgView.hidden=true 49 pageControl.hidden=true 50 51 let image = imageArray[0].allValues[0] 52 53 print(image.image) 54 55 centerImage.image = getImage(imageView: (imageArray.lastObject?.allValues[0])! as! UIImageView) 56 scrollview.scrollEnabled=false 57 }else if imageArray.count>=2 { 58 pageBgView.hidden=false 59 pageControl.hidden=false 60 leftImage.image = getImage(imageView: (imageArray.lastObject?.allValues[0])! as! UIImageView) 61 centerImage.image = getImage(imageView: (imageArray[0].allValues[0]) as! UIImageView) 62 rightImage.image = getImage(imageView: (imageArray[1].allValues[0]) as! UIImageView) 63 scrollview.scrollEnabled=true 64 pageBgView.bounds=CGRectMake(0, 0, CGFloat(imageArray.count)*20/375.0*SW, 13/375.0*SW) 65 setTimer() 66 } 67 pageControl.numberOfPages = imageArray.count 68 } 69 70 func getImage(imageView imageView:UIImageView) -> UIImage { 71 72 if imageView.image==nil { 73 return UIImage(named: "tpjz")! 74 }else{ 75 return imageView.image! 76 } 77 } 78 79 func pauseTimer() { 80 81 if (timer != nil) { 82 if timer!.valid { 83 timer!.invalidate() 84 } 85 } 86 } 87 88 func getLoadImage(urlArray :NSArray, headScroll :ZLScrollView) { 89 let imageArr = NSMutableArray() 90 91 for i in 0...urlArray.count-1 { 92 93 let cachedImage = SDImageCache.sharedImageCache().imageFromDiskCacheForKey(urlArray[i] as! String) 94 95 let imageView = UIImageView(frame: CGRectMake(0, 0, SW, self.frame.height)) 96 97 if (cachedImage != nil) { 98 imageView.image=cachedImage 99 } 100 else{ 101 imageView.sd_setImageWithURL(NSURL(string :String(urlArray[i]))) 102 } 103 104 let imageDic = [ String(urlArray[i]) : imageView ] 105 106 imageArr.addObject(imageDic) 107 108 initWithImage(array: imageArr, array: urlArray) 109 } 110 111 } 112 113 func resumeTimer() { 114 if (timer != nil) { 115 if timer!.valid { 116 timer!.invalidate() 117 } 118 } 119 } 120 121 func setTimer() { 122 if timer==nil { 123 timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(ZLScrollView.scrorllViewWithTimerAction), userInfo: nil, repeats: true) 124 } 125 } 126 127 func scrorllViewWithTimerAction() { 128 scrollview.contentOffset = CGPointMake(2*SW, 0) 129 isAutoMove = true 130 self.performSelector(#selector(ZLScrollView.scrollViewDidEndDecelerating), withObject: scrollview, afterDelay: 0) 131 } 132 133 func createScrollView() { 134 135 scrollview=UIScrollView() 136 scrollview.frame=self.bounds 137 scrollview.showsVerticalScrollIndicator = false 138 scrollview.showsHorizontalScrollIndicator = false 139 scrollview.delegate = self 140 scrollview.pagingEnabled = true 141 self.addSubview(scrollview) 142 scrollview.contentSize = CGSizeMake(SW*3, selfHeight) 143 scrollview.setContentOffset(CGPointMake(SW, 0), animated: false) 144 145 pageBgView=UIImageView() 146 pageControl=UIPageControl() 147 pageControl.frame=CGRectMake(SW/3, self.frame.height-14/375.0*SW, SW/3, 10/375.0*SW) 148 pageBgView.center=CGPointMake(SW/2, self.frame.height-9.5/375.0*SW) 149 pageBgView.bounds=CGRectMake(0, 0, 20/375.0*SW, 13/375.0*SW) 150 pageBgView.image=UIImage(named: "icon_bg_tu")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 151 self.addSubview(pageBgView) 152 pageControl.pageIndicatorTintColor=UIColor.whiteColor() 153 pageControl.currentPageIndicatorTintColor=UIColor.orangeColor() 154 pageControl.backgroundColor=UIColor.clearColor() 155 pageControl.alpha=0.5 156 self.addSubview(pageControl) 157 158 leftImage=UIImageView(frame:CGRectMake(0, 0, SW, selfHeight)) 159 centerImage=UIImageView(frame:CGRectMake(SW, 0, SW, selfHeight)) 160 centerImage.backgroundColor=UIColor.redColor() 161 rightImage=UIImageView(frame:CGRectMake(SW*2, 0, SW, selfHeight)) 162 scrollview.addSubview(leftImage) 163 scrollview.addSubview(centerImage) 164 scrollview.addSubview(rightImage) 165 166 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ZLScrollView.imageViewTapGestureAction)) 167 scrollview.addGestureRecognizer(tapGesture) 168 } 169 170 typealias SelectImageBlcok = Int -> Void 171 var selectImageBlcok : SelectImageBlcok! 172 173 func imageViewTapGestureAction() { 174 let dic = imageArray[pageCount] 175 176 for i in 0...urlsArray.count-1 { 177 let str = urlsArray[i] 178 179 if String(str)==String(dic.allKeys[0]) { 180 181 self.selectImageBlcok(i) 182 } 183 184 } 185 } 186 187 func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 188 189 if scrollview.contentOffset.x > SW { 190 pageCount=(pageCount+1)%imageArray.count 191 }else if scrollview.contentOffset.x < SW { 192 pageCount=(pageCount-1+imageArray.count)%imageArray.count 193 } 194 pageControl.currentPage = pageCount 195 196 leftImage.image=getImage(imageView: (imageArray[(pageCount-1+imageArray.count)%imageArray.count]).allValues[0] as! UIImageView) 197 centerImage.image=getImage(imageView: (imageArray[(pageCount+imageArray.count)%imageArray.count]).allValues[0] as! UIImageView) 198 rightImage.image=getImage(imageView: (imageArray[(pageCount+1+imageArray.count)%imageArray.count]).allValues[0] as! UIImageView) 199 if isAutoMove==nil { 200 timer.fireDate.dateByAddingTimeInterval(3) 201 } 202 isAutoMove=false 203 } 204 205 required init?(coder aDecoder: NSCoder) { 206 fatalError("init(coder:) has not been implemented") 207 } 208 209 }