首页 > 其他分享 >swift开发之 -- 自动轮播图(UIScrollView+UIPageControl+Timer)

swift开发之 -- 自动轮播图(UIScrollView+UIPageControl+Timer)

时间:2023-08-22 15:33:00浏览次数:36  
标签:轮播 -- self Timer width myscrollView func page pageControl

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

代码如下:

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开发之 -- 自动轮播图(UIScrollView+UIPageControl+Timer)_代理方法

作者:稻草人11223

标签:轮播,--,self,Timer,width,myscrollView,func,page,pageControl
From: https://blog.51cto.com/u_13188203/7190274

相关文章

  • ios开发之 -- NSData 和 NSString , UIImage 等之间的互转
    1//NSData转换为UIImage2NSData*imageData=[NSDatadataWithContentsOfFile:imagePath];3UIImage*image=[UIImageimageWithData:imageData];45//UIImage转换为NSData6NSData*imageData=UIImagePNGRepresentation(aimae);1.......
  • 技术领先的用友iuap平台,助力升级数智化底座、驾驭数智未来
    8月19日下午,由用友主办的“2023全球商业创新大会-企业数智化技术峰会”,在上海市“国家会展中心”隆重召开。此次峰会以“升级企业数智化底座”为主题,与众多行业领先企业大咖、生态伙伴,揭秘用友BIP核心技术与平台能力,解析多维度场景下企业数智化底座升级路径,共享行业领先企业升级数......
  • 数字藏品app制作软件
      数字藏品的市场发展,促进更多的人进来制作开发数字藏品app软件,这些软件能为用户提供给各种的价值,实现商品的流通转换,帮助我们找到适合自己的藏品。  首先,数字藏品app制作软件通常具有艺术创作功能,这些软件提供了各种绘画、图形设计工具,使用户能够尽情地表达自己的想法和......
  • ios开发之--UICollectionView的使用
    最近项目中需要实现一种布局,需要用到UICollectionView,特在此整理记录下!贴上最终实现的效果图: 1,声明@interfaceFirstViewController()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>@property(nonatomic,strong)UICollectionView*m......
  • VNPY-网络交易(算法交易)
    fromvnpy.trader.constantimportDirectionfromvnpy.trader.objectimportTradeData,OrderData,TickDatafromvnpy.trader.engineimportBaseEnginefromvnpy.trader.constantimportOrderType,Offset,Directionfrom..templateimportAlgoTemplateimportmat......
  • VNPY-网格交易(策略交易)
    ##grid_trade_strategy.pyfromvnpy_ctastrategyimport(CtaTemplate,StopOrder,TickData,BarData,TradeData,OrderData,BarGenerator,ArrayManager,)fromvnpy.trader.constantimportOrderType,Offset,DirectionclassGr......
  • 查找你的apple订单
     两个途径!不同商品对应!1.获取关于你通过Apple购买的内容的帮助https://support.apple.com/zh-cn/HT2040882.通过苹果官方的订单号查询https://www.apple.com.cn/store......
  • vue中watch和computed的区别
    computed中的console.log会执行吗?然而,需要注意的是,console.log语句在计算属性计算期间执行的结果将被打印到浏览器的开发者工具控制台中,并不会直接在页面上显示。如果你希望在页面上显示计算属性的值,可以将其绑定到模板中进行显示。computed的触发时机?在Vue中,computed属性的......
  • Linux硬链接和符号链接
    硬链接多个文件名指向同一个物理内存地址符号链接类似于C的指针 ......
  • oracle-行转列
    现有由多个诊断组成的字段,诊断个数不定,由英文逗号拼接。现需要将字段分解,每条诊断列为一行。转化前字段如下图:转化后字段如下图:SQL实现方法如下:selecta.id,substr(编码,instr(编码,',',1,levels.lvl)+1,instr(编码,',',1,levels.lvl+1)-(instr(编码,',',1,levels.lvl)+1)......