swift开发之 -- 自动轮播图(UIScrollView+UIPageControl+Timer)
比较简单,原理就不说了,这里只做记录:
代码如下:
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)的更多相关文章
- ios开发之 -- 自动轮播图创建
这里是oc版本的,简单记录下: 具体代码如下: 1,准备 #define FRAME [[UIScreen mainScreen] bounds] #define WIDTH FRAME.size.w ...
- 原生js手动轮播图
手动轮播图,为轮播图中的一种,轮播图主要有无缝轮播,手动轮播,延迟轮播,切换轮播等等... 轮播图主要用于展现图片,新出商品,词条,又能美观网页.給网页中增加动态效果. 手动轮播,是小编认为最简单的一 ...
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- swift-自定义无限轮播图
一 前言 1.之前一直在用OC编程,最近才开始接触使用swift就发现使用OC越来越不习惯,感觉已经爱上了swift. 2.这个自定义轮播图只是对之前OC版本进行了翻译,欢迎指正. 3.我决定一步步 ...
- iOS swift版本无限滚动轮播图
之前写过oc版本的无限滚动轮播图,现在来一个swift版本全部使用snapKit布局,数字还是pageConrrol样式可选 enum typeStyle: Int { case pageContro ...
- JS实现自动轮播图效果(js案例)
现在很多网站都有轮播图,这篇文章主要为大家详细介绍了js实现轮播图的完整代码及原理,需要的小伙伴可以参考一下. 1.轮播图主要功能: 1. 图片自动轮播(主图切换同时下面导航图片也会跟着变化) 2. ...
- 用Vue来实现音乐播放器(八):自动轮播图啊
slider.vue组件的模板部分 <template> <div class="slider" ref="slider"> <d ...
- swiper手滑动轮播图后自动轮播失效解决办法
设置autoplay:true之后,再设置 autoplay:{disableOnInteraction: false} --------------------------------------- ...
- 仿网易新闻 ViewPager 实现图片自动轮播
新闻 App 首页最上方一般会循环播放热点图片,如下图所示. 本文主要介绍了利用 ViewPager 实现轮播图片,图片下方加上小圆点指示器标记当前位置,并利用 Timer+Handler 实现了自动 ...
随机推荐
- 给class添加id封装
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaHbase连接代码示例
package com.rokid.hbase; import java.io.IOException; import org.apache.hadoop.conf.Configuration; im ...
- uC/OS-III 概要
本章主要对 uC/OS-III 实时操作系统做一些概要介绍,使读者对 uC/OS-III 有个整体的浅 认识,为后面的章节的详细讲解做一个铺垫. 下图是 uC/OS-III 系统从底层到上层的文件结构 ...
- Android笔记(十一)第一个Fragment
Fragment是碎片的意思,能够參照Activity来理解Fragment,由于它们都能包括布局,都有自己的生命周期. 以下我们要让主活动包括两个碎片,而且让两个碎片充满屏幕 1.首先,新建两个碎片 ...
- 【Unity笔记】角色信息常用访问器get/set
玩家角色Player的实体类演示. // 访问器函数:角色姓名 public string PlayerName { get { return playerName; } set { playerNa ...
- uWSGI的各种部署方式
As a back-end with web-server, speak the uwsgi protocol <uwsgi id = "uwsgibk"> <s ...
- 在CMD下启动vmware、Xshell连接虚拟机以及控制Chrome浏览器自动执行js登录校园网
标题有点长,主要是写个bat出来玩玩, (1)不用每次都手动关闭mysql服务(我不想把它设为手动启动,有强迫症) (2)然后希望每次vmware能自动连上虚拟机 (3)以及每次Xshell都能自动启 ...
- C语言 · 陶陶摘苹果
算法提高 陶陶摘苹果 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3 ...
- linux性能评估与分析工具
linux是一个开源系统,其内核负责管理系统的进程,内存,设备驱动程序,文件和网络系统, 决定着系统的性能和稳定性.由于内核源码很容易获取,任何人都可以将自己认为优秀的代码 加入到其中.linux默认 ...
- Spring Session + Redis实现分布式Session共享
发表于 2016-09-29 文章目录 1. Maven依赖 2. 配置Filter 3. Spring配置文件 4. 解决Redis云服务Unable to configure Redis to k ...