美文网首页
Swift实现自定义进度条

Swift实现自定义进度条

作者: 玉思盈蝶 | 来源:发表于2020-09-06 17:14 被阅读0次

效果图如下:

image.png

实现代码如下:

import UIKit

@IBDesignable public class CustomProgressView: UIView {
    // MARK: 1.lift cycle
    
    override public init(frame: CGRect) {
        super.init(frame: frame)
        layer.addSublayer(progressLayer)
        layer.masksToBounds = true
        progressLayer.masksToBounds = true
        self.addSubview(imageView)
        imageView.frame = CGRect(x: 10, y: -5, width: 20, height: 20)
    }
    
    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: 2.private methods
    override public func draw(_ rect: CGRect) {
        var frameProgress = CGRect(x: rect.origin.x, y: rect.origin.y + 5, width: rect.size.width, height: rect.size.height - 5)
        frameProgress.size.width = progress * rect.width
        
        progressLayer.colors = [startColor.cgColor, endColor.cgColor]
        progressLayer.cornerRadius = progressCornerRadius
        progressLayer.borderColor = progressBorderColor.cgColor
        progressLayer.borderWidth = progressBorderWidth
        layer.cornerRadius = progressCornerRadius
        
        var imageFrame = rect
        imageFrame.origin.x = progress * rect.width - 20
        imageFrame.origin.y = 0
        imageFrame.size = CGSize(width: 20, height: 20)
        
        UIView.animate(withDuration: 0.2, animations: {
            self.progressLayer.frame = frameProgress
        }) { (finish) in
            UIView.animate(withDuration: 0.2, animations: {
                self.imageView.frame = imageFrame
            }, completion: nil)
        }
    }
    // MARK: 3.event response
    
    // MARK: 4.interface
    @IBInspectable public var startColor: UIColor = .red {
        didSet {
            setNeedsDisplay()
        }
    }
    
    @IBInspectable public var endColor: UIColor = .yellow {
        didSet {
            setNeedsDisplay()
        }
    }
    
    @IBInspectable public var progress: CGFloat = 0.0 {
        didSet {
            setNeedsDisplay()
        }
    }
    
    @IBInspectable public var progressCornerRadius: CGFloat = 0 {
        didSet {
            setNeedsLayout()
        }
    }
    
    @IBInspectable public var progressBorderColor: UIColor = UIColor.yellow {
        didSet {
            setNeedsLayout()
        }
    }
    
    @IBInspectable public var progressBorderWidth: CGFloat = 1 {
        didSet {
            setNeedsLayout()
        }
    }
    
    // MARK: 5.getter
    private lazy var progressLayer: CAGradientLayer = {
        let progressLayer = CAGradientLayer()
        progressLayer.frame = CGRect.zero
        progressLayer.locations = [0, 1]
        progressLayer.startPoint = CGPoint(x: 0, y: 1)
        progressLayer.endPoint = CGPoint(x: 1, y: 1)
        return progressLayer
    }()
    
    private lazy var imageView: UIImageView = {
       let imageView = UIImageView(image: UIImage(named: "scale_big"))
        return imageView
    }()
}

使用如下:

private lazy var progressView: CustomProgressView = {
        let progressView = CustomProgressView()
        progressView.backgroundColor = UIColor.clear
        progressView.startColor = UIColor.red
        progressView.endColor = UIColor.green
        progressView.progressCornerRadius = 10
        progressView.progress = 0.1
        view.addSubview(progressView)
        return progressView
    }()

PS:不过因为我们的设计图还存在纹理的一个效果,最后我还是让UI切图实现的,哈哈。不过可能切图可能还好点吧,毕竟不用一直绘制哈,是不是性能好那么点呢~~

相关文章

  • android 圆形进度条

    圆形的进度条,自定义控件实现

  • Android圆形进度条自定义

    自定义圆形进度条 实现 圆形进度条api 使用 将MyCircleProgressView和attrs.xml下的...

  • Swift实现自定义进度条

    效果图如下: 实现代码如下: 使用如下: PS:不过因为我们的设计图还存在纹理的一个效果,最后我还是让UI切图实现...

  • ProgressBar

    Android控件--ProgressBar 三种方式实现自定义圆形进度条ProgressBar

  • 仿IWatch环形进度条自定义控件

    一、环形进度条1、自定义属性2、绘制3、实现动态刷新机制4、部署控件 二、进度条嵌套集合1、自定义属性2、控件部署...

  • Android自定义view实现SeekBar

    引言 该SeekBar由自定义view来实现,主要完成了普通的进度条(可修改进度条的颜色,游标颜色,二级进度条颜色...

  • Mac开发-NSSlider

    NSSlider实现七彩色的进度条自定义NSSliderCell初始化进度条相关的事件:整体颜色、半径、滑动块的大...

  • 超酷的自定义进度条Discrete Seek Bar

    功能介绍: 安卓开源框架discrete seek bar主要实现自定义进度条,DiscreteSeekBar 实...

  • 关于安卓自定义进度条(二)

    先上gif效果图: 上图中,蓝色的进度条为自定义进度条 注意!!!源码在文末 背景 要实现一个进度条,大部分情况下...

  • 自定义View实战四:圆形进度条

    本文介绍自定义圆形进度条的实现,主要利用自定义 View 和动画相关知识。 下面是效果图 实现步骤分析准备好外层圆...

网友评论

      本文标题:Swift实现自定义进度条

      本文链接:https://www.haomeiwen.com/subject/yficektx.html