swift-自定义无限轮播图

一  前言

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 }

 

转载于:https://www.cnblogs.com/nanfanggulang/p/5852917.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值