zoukankan      html  css  js  c++  java
  • 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 = 1
            
            //添加定时器
            self.setupTimer()

    具体方法:

    func addScrollView(){
            self.myscrollView = UIScrollView()
            self.myscrollView?.frame = CGRect(x:0,y:0,kScreenWidth,height:kScreenHeight/2)
            self.myscrollView?.contentSize = CGSize(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,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,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,(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,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)
        }

    效果如下:

  • 相关阅读:
    VS停止调试,IIS Express也跟着关闭了
    会钓鱼的程序员
    彻底搞懂https原理
    Java小知识
    ORA-01000: 超出打开游标的最大数(java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误)
    虚拟机电脑重启后连接不上ORACLE
    电视直播源
    国内开源镜像站
    分享一波泰勒斯威夫特手机高清壁纸
    阿里云网盘内测申请
  • 原文地址:https://www.cnblogs.com/hero11223/p/7467161.html
Copyright © 2011-2022 走看看