全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

swift实现自动轮播图效果(UIScrollView+UIPageControl+Timer)

本文实例为大家分享了swift实现自动轮播图效果的具体代码,供大家参考,具体内容如下

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

代码如下:

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 = 1
  
  //添加定时器
  self.setupTimer()

具体方法:

func addScrollView(){
  self.myscrollView = UIScrollView()
  self.myscrollView?.frame = CGRect(x:0,y:0,width:kScreenWidth,height:kScreenHeight/2)
  self.myscrollView?.contentSize = CGSize(width:kScreenWidth*3,height:kScreenHeight/2)
  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:0,y:64,width:kScreenWidth,height:kScreenHeight/2))
   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:15,y:kScreenHeight/2-100,width:kScreenWidth-30,height:40))
   lab1.textAlignment = .center
   lab1.backgroundColor = UIColor.red
   lab1.text = course["name"]
   page.addSubview(lab1)
   
   page.frame = CGRect(x:CGFloat(seq)*(size?.width)!,y:0,width:(size?.width)!,height:(size?.height)!)
   self.myscrollView?.addSubview(page)
   
  }
 }
 
 func addPageControl(){
  self.pageControl = UIPageControl(frame:CGRect(x:kScreenWidth/2-50/2,y:kScreenHeight/2-40,width:50,height:35))
  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 == 0 || self.pageControl?.currentPage == 2 {
   mycurrentPage = -mycurrentPage!
  }
  self.myscrollView?.contentOffset = CGPoint(x:CGFloat(kScreenWidth)*CGFloat((pageControl?.currentPage)!),y:0)
 }

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  # 轮播图  # iOS ScrollView实现自动布局的方法(适用Swift 3.0 )  # Swift实现可自定义分页宽度的UIScrollView  # Swift 如何让ScrollView滚动到具体某个位置  # 就不  # 说了  # 拖动  # 大家分享  # 只做  # 具体内容  # 大家多多  # height  # kScreenWidth  # width  # kScreenHeight  # showsHorizontalScrollIndicator  # CGSize  # contentSize  # addPageControl  # pagecontrol  # addImages  # setupTimer  # CGRect  # frame 


相关文章: 如何用wdcp快速搭建高效网站?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  小型网站制作HTML,*游戏网站怎么搭建?  免费视频制作网站,更新又快又好的免费电影网站?  建站之星安装步骤有哪些常见问题?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  手机网站制作与建设方案,手机网站如何建设?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何高效完成独享虚拟主机建站?  建设网站制作价格,怎样建立自己的公司网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  湖北网站制作公司有哪些,湖北清能集团官网?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  如何通过VPS建站实现广告与增值服务盈利?  股票网站制作软件,网上股票怎么开户?  如何在阿里云通过域名搭建网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  想学网站制作怎么学,建立一个网站要花费多少?  西安大型网站制作公司,西安招聘网站最好的是哪个?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  如何用狗爹虚拟主机快速搭建网站?  如何在宝塔面板创建新站点?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何在Tomcat中配置并部署网站项目?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  建站之星代理如何优化在线客服效率?  如何用景安虚拟主机手机版绑定域名建站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  建站之星免费版是否永久可用?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  自助网站制作软件,个人如何自助建网站?  如何快速搭建高效可靠的建站解决方案?  建站之星安装后如何配置SEO及设计样式?  深入理解Android中的xmlns:tools属性  深圳网站制作案例,网页的相关名词有哪些?  网站制作的步骤包括,正确网址格式怎么写?  如何通过商城自助建站源码实现零基础高效建站?  如何快速打造个性化非模板自助建站?  制作网站的软件免费下载,免费制作app哪个平台好?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  如何在阿里云ECS服务器部署织梦CMS网站?  宁波免费建站如何选择可靠模板与平台?  Bpmn 2.0的XML文件怎么画流程图  如何通过cPanel快速搭建网站?  建站之星如何助力企业快速打造五合一网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  建站之星如何配置系统实现高效建站?  制作网页的网站有哪些,电脑上怎么做网页? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。