ios - 如何在 ios 中绘制具有多种颜色的动画路径?

标签 ios swift animation drawing

我需要在我的 iOS 应用程序中绘制类似于下图的内容,除了圆弧可能包含更多颜色:

Path to draw

我知道如何绘制它,但我正在寻找一种方法来为路径的绘制设置动画。

有个类似的问题here , 除了圆不是动画。 This是另一个问题,它解释了如何为圆圈制作动画,在我的例子中它工作正常,除了它不处理路径中的多种颜色。

如何做到这一点?

最佳答案

我找到了一个非常有效的通用解决方案。由于无法绘制不同颜色的独特路径,因此我只绘制了所有不同颜色的路径,没有动画,这些路径构成了我想要的路径。之后,我在相反方向绘制了一条覆盖所有这些路径的独特路径,并对这条路径应用了动画。

例如,在上面的例子中,我用下面的代码绘制了两条弧线:

class CircleView: UIView {

    let borderWidth: CGFloat = 20

    let startAngle = CGFloat(Double.pi)
    let middleAngle = CGFloat(Double.pi + Double.pi / 2)
    let endAngle = CGFloat(2 * Double.pi)
    var primaryColor = UIColor.red
    var secondaryColor = UIColor.blue
    var currentStrokeValue = CGFloat(0)

    override func draw(_ rect: CGRect) {
        let center = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
        let radius = CGFloat(self.frame.width / 2 - borderWidth)
        let path1 = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: middleAngle, clockwise: true)
        let path2 = UIBezierPath(arcCenter: center, radius: radius, startAngle: middleAngle, endAngle: endAngle, clockwise: true)
        path1.lineWidth = borderWidth
        primaryColor.setStroke()
        path1.stroke()
        path2.lineWidth = borderWidth
        secondaryColor.setStroke()
        path2.stroke()
    }
}

之后,我得到路径 path3,然后我将它添加到将添加到 View 的层:

var path3 = UIBezierPath(arcCenter: center, radius: radius, startAngle: endAngle, endAngle: startAngle, clockwise: true)

注意在这条路径中,它以相反的顺序覆盖了前两条路径,因为它的startAngle等于endAngle的值,所以它的endAngle等于startAngle并且 clockwise 属性设置为 true。这条路径是我要制作动画的路径。

例如,如果我想显示整个(假想)路径(由不同颜色的路径组成的路径)的 40%,我将其转换为显示覆盖路径的 60% path3。我们可以在问题中提供的链接中找到为 path3 设置动画的方式。

关于ios - 如何在 ios 中绘制具有多种颜色的动画路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30737923/

相关文章:

javascript - 如何在 EaselJS 中更新径向渐变填充颜色

swift - 从 XCode 运行项目是否会清除文件系统?

ios - 进行网络通话的最佳场所

javascript - 不用jquery的动画,左右滑动

ios - AFNetworking 异步 setCompletionBlockWithSuccess

ios - 有没有办法判断 Dropbox block 上传提交是否成功?

javascript - CSS 过渡和 JS 同时切换

ios - iOS 中 NSURLSession 使用后台线程或后台传输服务有很大区别吗

ios - iOS-数据库SQLite类/插件/库

iphone - 如何将选项卡栏 Controller 放在 View Controller 而不是委托(delegate)中?