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

发布时间 - 2026-01-11 03:28:44    点击率:

本文实例为大家分享了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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel Fortify是什么,和Jetstream有什么关系  googleplay官方入口在哪里_Google Play官方商店快速入口指南  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  如何快速打造个性化非模板自助建站?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  开心动漫网站制作软件下载,十分开心动画为何停播?  Bootstrap CSS布局之列表  桂林网站制作公司有哪些,桂林马拉松怎么报名?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  中山网站制作网页,中山新生登记系统登记流程?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel如何优化应用性能?(缓存和优化命令)  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel怎么在Controller之外的地方验证数据  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Laravel观察者模式如何使用_Laravel Model Observer配置  ,在苏州找工作,上哪个网站比较好?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Python结构化数据采集_字段抽取解析【教程】  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何获取PHP WAP自助建站系统源码?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Linux安全能力提升路径_长期防护思维说明【指导】  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel集合Collection怎么用_Laravel集合常用函数详解  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何快速搭建高效简练网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?