Swift39/90Days - 如何实现圆形加载进度条

Swift90Days - 如何实现圆形加载进度条

今天照着 raywenderlich 的教程学习了一下使用 CAShapeLayer 实现一个原型的加载指示器。完成效果如图:

后面显示图片的动画暂且不谈,先说这个红色的圆环动画。

通过自定义一个 UIView 实现了这个红色的加载指示器,上面有一个 CAShapeLayer ,用来显示红色的圆环,圆环部分的关键代码是:

let circlePathLayer = CAShapeLayer()
let circleRadius: CGFloat = 20.0
func configure() {
    circlePathLayer.frame = bounds
    circlePathLayer.linewidth = 2
    circlePathLayer.fillColor = UIColor.clearColor().CGColor
    circlePathLayer.strokeColor = UIColor.redColor().CGColor
    layer.addSublayer(circlePathLayer)
    backgroundColor = UIColor.whiteColor()
    progress = 0
}

其实也没什么,就是设置 framelinewidth 以及一些颜色之类的。然后在 layoutSubviews 里面设置 layerpath 就可以了:

override func layoutSubviews() {
    super.layoutSubviews()
    circlePathLayer.frame = bounds
    circlePathLayer.path = UIBezierPath(ovalInRect: circleFrame()).CGPath
}

至于动画,则是通过 setter 来实现的,在 set 里设置 Layer 的终点:

var progress: CGFloat {
    get {
        return circlePathLayer.strokeEnd
    }
    set {
        if (newValue > 1) {
            circlePathLayer.strokeEnd = 1
        } else if (newValue < 0) {
            circlePathLayer.strokeEnd = 0
        } else {
            circlePathLayer.strokeEnd = newValue
        }
    }
}

嗯挺简单也挺实用的,刚好公司里面有用到。完整的教程和项目源码见原文。

原文链接

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...