swift 利用赛贝尔曲线 画环形进度指示器

import UIKit

@IBDesignable
class RTShapLayerView: UIView {


    var timer: Timer!
    var shapeLayer: CAShapeLayer!
    var mdowntime = 101


    required init?(coder aDecoder: NSCoder) {
        super .init(coder: aDecoder)
        creatUI()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        creatUI()
    }

    func creatUI() {

        shapeLayer = CAShapeLayer()
        self.layer.addSublayer(shapeLayer)
        let onePath = UIBezierPath(arcCenter: CGPoint(x: self.bounds.height/2, y: self.bounds.width/2), radius: self.bounds.width/2, startAngle: CGFloat(Double.pi*3/2), endAngle: CGFloat(Double.pi*2+Double.pi*3/2), clockwise: true)
        shapeLayer.path = onePath.cgPath
        shapeLayer.lineWidth = 2
        shapeLayer.strokeStart = 0
        shapeLayer.strokeEnd = 0
        shapeLayer.fillColor = UIColor.clear.cgColor
        timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.animate), userInfo: nil, repeats: true)
        
    }

    @objc func animate() {
        shapeLayer.strokeColor = UIColor.colorWithHex("#6691f7").cgColor
        if mdowntime == 1 {
            timer.invalidate()
            timer = nil
            mdowntime = 100

        }else{
            self.shapeLayer.strokeEnd += 0.01
            mdowntime -= 1

        }
    }
}

使用方法继承自定义的View即可

猜你喜欢

转载自blog.csdn.net/hengyunbin/article/details/85064928