Swift - 利用UIScrollView 实现轮播图
2016-06-20 11:54
344 查看
看过网上很多轮播图的Demo,都是通过UITableView 或者 UICollectionView来实现的, 心血来潮用UIScrollView来实现一下,没做代码优化,只是个Demo。欢迎拍砖
[b]先赋上代码源码:[/b]// // TimerScrollView.swift // 时光网Swift // // Created by 亓大志 on 16/4/20. // Copyright © 2016年 亓大志. All rights reserved. // import UIKit protocol TimerScrollViewDelegate { func scrollToIndexOfPage(index:Int) } class TimerScrollView: UIView,UIScrollViewDelegate { var count : Int = 0 var timer : NSTimer! var timerDelegate:TimerScrollViewDelegate? var scrollView : UIScrollView? var pageCT : UIPageControl? /* params: array : 图片URL集合 contentOffSetIndex : 偏移位置 */ func configScrollView(array:NSArray,contentOffsetIndex:Int){ count = array.count self.clipsToBounds = false self.backgroundColor = UIColor.whiteColor() scrollView = UIScrollView(frame: self.bounds) scrollView!.delegate = self scrollView!.contentSize = CGSizeMake(CGFloat(array.count+2) * self.frame.size.width, self.frame.size.height) scrollView!.pagingEnabled = true scrollView!.showsHorizontalScrollIndicator = false scrollView!.showsVerticalScrollIndicator = false self.addSubview(scrollView!) createImageViews(array,contentOffsetIndex:contentOffsetIndex) configPageControll(contentOffsetIndex) timerBegin() } func createImageViews(array:NSArray,contentOffsetIndex:Int){ for i in 0 ..< array.count+2{ var url : String! if i == 0 { url = array[array.count-1] as! String }else if i == array.count + 1 { url = array[0] as! String }else { url = array[i-1] as! String } let URL : NSURL = NSURL(string: url)! let imageView = UIImageView(frame: CGRectMake(CGFloat(i)*self.frame.size.width, 0, self.frame.size.width, self.frame.size.height)) //图片的加载需要依赖于框架, scrollView!.addSubview(imageView) } scrollView!.contentOffset = CGPointMake(CGFloat(contentOffsetIndex+1)*self.frame.size.width, 0) } func configPageControll(currentPage:Int) { pageCT = UIPageControl(frame: CGRectMake(0,self.frame.size.height-30.0,self.frame.size.width,15)) pageCT!.pageIndicatorTintColor = UIColor.grayColor() pageCT!.currentPageIndicatorTintColor = UIColor.whiteColor() pageCT!.numberOfPages = count pageCT!.currentPage = currentPage self.addSubview(pageCT!) } //开启 func timerBegin() { if timer != nil { timer.invalidate() timer = nil } timer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("timerRun:"), userInfo: nil, repeats: true) NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes) } //暂停 func timerSuspend() { if timer != nil { timer.invalidate() timer = nil } } func timerRun(runTimer:NSTimer) { let offsetX = scrollView!.contentOffset.x UIView.animateWithDuration(0.4, animations: { () -> Void in self.scrollView!.contentOffset = CGPointMake(offsetX+self.frame.size.width, 0) }) { (boolValue:Bool) -> Void in self.resetContentOffset() } } func scrollViewWillBeginDragging(scrollView: UIScrollView) { timerSuspend() } func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { timerBegin() } func scrollViewDidEndDecelerating(scrollView: UIScrollView) { resetContentOffset() } func resetContentOffset(){ if scrollView!.contentOffset.x < self.frame.size.width { scrollView!.contentOffset = CGPointMake(self.frame.size.width*CGFloat(count), 0) } if scrollView!.contentOffset.x > self.frame.size.width * CGFloat(count) { scrollView!.contentOffset = CGPointMake(self.frame.size.width, 0) } let vc = self.timerDelegate as! UIViewController if vc.respondsToSelector(Selector("scrollToIndexOfPage:")) { let index = Int((scrollView!.contentOffset.x - self.frame.size.width) / self.frame.size.width) pageCT?.currentPage = index timerDelegate?.scrollToIndexOfPage(index) } } }
GitHub地址:TimerForScrollView
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- Apple Swift学习教程
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 介绍 Fedora 上的 Swift
- JQuery悬停控制图片轮播――代码简单
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程