比较简单,原理就不说了,这里只做记录:

代码如下:

1,准备

var pageControl:UIPageControl?
var myscrollView:UIScrollView?
var myTimer:Timer?
var mycurrentPage:NSInteger? var courses = [
["name":"first","pic":"1.jpeg"],
["name":"second","pic":"2.jpeg"],
["name":"third","pic":"3.jpeg"]
]

2,内容的添加

 //添加scrollview
self.addScrollView()
//添加图片
self.addImages()
//添加pagecontrol
self.addPageControl() mycurrentPage = //添加定时器
self.setupTimer()

具体方法:

func addScrollView(){
self.myscrollView = UIScrollView()
self.myscrollView?.frame = CGRect(x:,y:,width:kScreenWidth,height:kScreenHeight/)
self.myscrollView?.contentSize = CGSize(width:kScreenWidth*,height:kScreenHeight/)
self.myscrollView?.showsHorizontalScrollIndicator = false
self.myscrollView?.showsVerticalScrollIndicator = false
self.myscrollView?.scrollsToTop = false
self.myscrollView?.delegate = self
self.myscrollView?.isPagingEnabled = true
self.view.addSubview(self.myscrollView!) } func addImages(){
let size = self.myscrollView?.bounds.size
for (seq,course) in courses.enumerated() {
let page = UIView(frame:CGRect(x:,y:,width:kScreenWidth,height:kScreenHeight/))
let imageView=UIImageView(image:UIImage(named:course["pic"]!))
imageView.frame = page.frame
page.addSubview(imageView)
page.backgroundColor = UIColor.gray
let lab1 = UILabel(frame:CGRect(x:,y:kScreenHeight/-,width:kScreenWidth-,height:))
lab1.textAlignment = .center
lab1.backgroundColor = UIColor.red
lab1.text = course["name"]
page.addSubview(lab1) page.frame = CGRect(x:CGFloat(seq)*(size?.width)!,y:,width:(size?.width)!,height:(size?.height)!)
self.myscrollView?.addSubview(page) }
} func addPageControl(){
self.pageControl = UIPageControl(frame:CGRect(x:kScreenWidth/-/,y:kScreenHeight/-,width:,height:))
self.pageControl?.backgroundColor = UIColor.blue
self.pageControl?.numberOfPages = courses.count
self.view.addSubview(self.pageControl!)
} func setupTimer() {
self.myTimer = Timer.init(timeInterval: 2.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
RunLoop.main.add(self.myTimer!, forMode: RunLoopMode.defaultRunLoopMode) // DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
// self.myTimer?.fire()
// } } func closeTimer(){
self.myTimer?.invalidate()
self.myTimer = nil
} func timerAction(){
self.pageControl?.currentPage += mycurrentPage! if self.pageControl?.currentPage == || self.pageControl?.currentPage == {
mycurrentPage = -mycurrentPage!
}
self.myscrollView?.contentOffset = CGPoint(x:CGFloat(kScreenWidth)*CGFloat((pageControl?.currentPage)!),y:)
}

3,一些代理方法的实现,手动拖动的时候,销毁定时器,节省内存

internal func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let page = Int(scrollView.contentOffset.x/scrollView.frame.size.width)
self.pageControl?.currentPage = page } func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
self.closeTimer()
} func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
self.setupTimer()
} func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
self.pageControl?.currentPage = Int(scrollView.contentOffset.x/kScreenWidth)
}

效果如下:

swift开发之 -- 自动轮播图(UIScrollView+UIPageControl+Timer)的更多相关文章

  1. ios开发之 -- 自动轮播图创建

    这里是oc版本的,简单记录下: 具体代码如下: 1,准备 #define FRAME [[UIScreen mainScreen] bounds] #define WIDTH FRAME.size.w ...

  2. 原生js手动轮播图

    手动轮播图,为轮播图中的一种,轮播图主要有无缝轮播,手动轮播,延迟轮播,切换轮播等等... 轮播图主要用于展现图片,新出商品,词条,又能美观网页.給网页中增加动态效果. 手动轮播,是小编认为最简单的一 ...

  3. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

  4. swift-自定义无限轮播图

    一  前言 1.之前一直在用OC编程,最近才开始接触使用swift就发现使用OC越来越不习惯,感觉已经爱上了swift. 2.这个自定义轮播图只是对之前OC版本进行了翻译,欢迎指正. 3.我决定一步步 ...

  5. iOS swift版本无限滚动轮播图

    之前写过oc版本的无限滚动轮播图,现在来一个swift版本全部使用snapKit布局,数字还是pageConrrol样式可选 enum typeStyle: Int { case pageContro ...

  6. JS实现自动轮播图效果(js案例)

    现在很多网站都有轮播图,这篇文章主要为大家详细介绍了js实现轮播图的完整代码及原理,需要的小伙伴可以参考一下. 1.轮播图主要功能: 1.  图片自动轮播(主图切换同时下面导航图片也会跟着变化) 2. ...

  7. 用Vue来实现音乐播放器(八):自动轮播图啊

    slider.vue组件的模板部分 <template> <div class="slider" ref="slider"> <d ...

  8. swiper手滑动轮播图后自动轮播失效解决办法

    设置autoplay:true之后,再设置 autoplay:{disableOnInteraction: false} --------------------------------------- ...

  9. 仿网易新闻 ViewPager 实现图片自动轮播

    新闻 App 首页最上方一般会循环播放热点图片,如下图所示. 本文主要介绍了利用 ViewPager 实现轮播图片,图片下方加上小圆点指示器标记当前位置,并利用 Timer+Handler 实现了自动 ...

随机推荐

  1. AES加解密JS和php互相处理字符

    Reference: http://blog.csdn.net/carlos__z/article/details/53185082 JavaScript code? 1 2 3 4 5 6 7 8 ...

  2. 获取IP和mac地址

    1.获取IP static string GetLocalIp() { string hostname = Dns.GetHostName();//得到本机名 //IPHostEntry localh ...

  3. epel源报错怎么解决?

    http://mirrors.aliyun.com/centos/6/extras/x86_64/repodata/81fdefdd048c01dcc6cda1fd53aacec2a0613ea10d ...

  4. there are 0 datanode.....

    当时执行hive的导入数据load data  inpath "XXXX" into table.....的时候发现总是导不进去,最后试了下简单的从Linux 到 HDFS上传文件 ...

  5. 关于Unity中的碰撞检测和管理(2D)

    创建Unity3D项目和Unity2D项目的区别. 1.3D项目有摄像机和太阳光,2D项目只有摄像机 2.3D项目使用的贴图类型是Texture纹理,2D项目使用的贴图类型是Sprite 2D/UI ...

  6. 关于Cocos2d-x随机数的生成

    1.使用前必须下一个随机种子,可以让每一次生成的随机数是不一样的,这里的每一次指的是时间上的每一次,如果是同一时间的随机数就不能这样写了 srand((unsigned)time(NULL));--- ...

  7. Hibernate中createCriteria即QBC查询的详细用法

    现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...

  8. 【转】WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  9. 【转】【OPenGL】OPenGL 画图板-- 中点算法画圆

    为了能以任意点为圆心画圆,我们可以把圆心先设为视点(相当于于将其平移到坐标原点),然后通过中点法扫描转换后,再恢复原来的视点(相当于将圆心平移回原来的位置). 圆心位于原点的圆有四条对称轴x=0,y= ...

  10. par函数的bg参数-控制图片的背景色

    bg 参数用于控制图片的背景色,默认为白色 代码示例: par(bg = "pink") plot(1:5, 1:5, main = "title", xlab ...