Swift5学习之旅之自动轮播图(UIProgressView、UIPageControl)

27 篇文章 0 订阅

Swift5学习之旅----自动轮播图(UIProgressView、UIPageControl)

在这里插入图片描述

如果能提供到帮助请点个赞再关闭吧👍
GitHub还没上传,用着Dropbox先吧(可能要翻墙
https://www.dropbox.com/sh/bk21cuya5bjew8o/AACOW3orlgvkoX7_yj12DJcQa?dl=0
Dropbox 轮播图

  • UIProgressView
    相关代码
import UIKit

class MyProgressView: UIProgressView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.progressViewStyle = .bar
//        self.setProgress(0, animated: true)
        
        //进度条颜色
        self.progressTintColor = UIColor.red
        self.trackTintColor = UIColor.gray
        
        //更改进度条的高度
        self.transform = CGAffineTransform.init(translationX: 1, y: 5)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

  • UIPageControl
import UIKit
class MyPageControl: UIPageControl {
    override init(frame: CGRect) {
        super.init(frame: frame)
        //不是当前页面的小点颜色
        self.pageIndicatorTintColor = UIColor.black
        //当前页面的小点颜色
        self.currentPageIndicatorTintColor = UIColor.red
//        self.backgroundColor = UIColor.blue
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

  • 功能的实现
//
//  ViewController.swift
//  轮播图
//
//  Created by 小天才智能电脑 on 2021/1/28.
//

import UIKit

class ViewController: UIViewController,UIScrollViewDelegate {
    let kScreenWidth = UIScreen.main.bounds.size.width
    let KScreenHeight = UIScreen.main.bounds.size.height
    
    var scrollView = MyScrollView()
    var pageControl = MyPageControl()
    var progressView = MyProgressView()
    
    var myTimer:Timer?
    var mycurrentPage:Int = 0
    var time:Int = 0
    var courses = [
        ["name":"first","pic":"1.jpg"],
        ["name":"second","pic":"2.jpg"],
        ["name":"third","pic":"3.jpg"]
      ]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        addScrollView()
        addImage()
        addPageControl()
        mycurrentPage = 1
        //添加定时器
        setupTimer()
        addProgress()
    }
    func addScrollView() {
        self.scrollView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: KScreenHeight/2)
        self.scrollView.contentSize = CGSize(width: kScreenWidth * 3, height: KScreenHeight/2)
        self.scrollView.delegate = self
        self.view.addSubview(scrollView)
    }
    func addProgress() {
        progressView.frame = CGRect(x: 50, y: 600, width: self.view.bounds.width - 100, height: 80)
        self.view.addSubview(progressView)
    }
    func addImage() {
        let size = self.scrollView.bounds.size
        for (seq,course) in courses.enumerated(){
            let page = UIView(frame: CGRect(x: 0, y: 0, 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 lab = UILabel(frame: CGRect(x: 15, y: KScreenHeight/2 - 100, width: kScreenWidth - 30, height: 40))
            lab.textAlignment = .center
//            lab.backgroundColor = UIColor.blue
            lab.text = course["name"]
            page.addSubview(lab)
            
            page.frame = CGRect(x: CGFloat(seq)*(size.width), y: 0, width: size.width, height: size.height)
            self.scrollView.addSubview(page)
        }
    }
    func addPageControl() {
        self.pageControl.frame = CGRect(x: kScreenWidth/2 - 50, y: KScreenHeight/2 + 50, width: self.view.bounds.width, height: 50)
        self.pageControl.numberOfPages = courses.count
//        self.pageControl.backgroundColor = UIColor.blue
        self.view.addSubview(pageControl)
    }
    
    func setupTimer() {
        self.myTimer = Timer.init(timeInterval: 0.1, target: self, selector: #selector(timeAction), userInfo: nil, repeats: true)
        
        RunLoop.main.add(self.myTimer!, forMode: .default)
        
    }
    
    @objc func timeAction() {
        time += 1
        if time == 30 {
            time = 0
            self.pageControl.currentPage += mycurrentPage
            if self.pageControl.currentPage == 0 || self.pageControl.currentPage == courses.count - 1{
                mycurrentPage = -mycurrentPage
            }
            self.scrollView.contentOffset = CGPoint(x: CGFloat(kScreenWidth) * CGFloat(pageControl.currentPage), y: 0)
        }
       
        self.progressView.setProgress(Float(time)/30, animated: true)
        
    }
    
    func closeTimer() {
        self.myTimer?.invalidate()
        self.myTimer = nil
    }
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let page = Int(scrollView.contentOffset.x/(self.view.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)
      }
    
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值