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


相关推荐: 韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何快速查询域名建站关键信息?  Swift中swift中的switch 语句  如何在服务器上配置二级域名建站?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何在橙子建站中快速调整背景颜色?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel如何使用Livewire构建动态组件?(入门代码)  如何用低价快速搭建高质量网站?  bootstrap日历插件datetimepicker使用方法  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel如何实现文件上传和存储?(本地与S3配置)  深圳网站制作培训,深圳哪些招聘网站比较好?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel如何与Inertia.js和Vue/React构建现代单页应用  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何为不同团队 ID 动态生成多个“认领值班”按钮  Bootstrap CSS布局之列表  简单实现Android文件上传  C++时间戳转换成日期时间的步骤和示例代码  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  中山网站推广排名,中山信息港登录入口?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Swift中循环语句中的转移语句 break 和 continue  如何在建站主机中优化服务器配置?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Mybatis 中的insertOrUpdate操作  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何挑选最适合建站的高性能VPS主机?  香港服务器WordPress建站指南:SEO优化与高效部署策略  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  详解MySQL数据库的安装与密码配置  如何在阿里云通过域名搭建网站?