在圆形图表上应用动画

Applying animation on a circular chart

我在 paintcode 中构建了一个与此示例非常相似的圆形图:

http://www.paintcodeapp.com/news/animating-apple-watch-activity-rings-in-paintcode

我已经成功地在我的 iOS 视图上轻松绘制了控件,但现在我想为图形设置动画,使其从 0 开始并向指定角度缓和。基本上动画应该看起来像上面 URL 中视频的前两秒。

制作此类动画的最佳方法是什么?

仅供参考:我在 C#/Xamarin 工作,但我对语法一点也不挑剔,所以 Objective C 或 Swift 示例就可以了。

你想用CAShapeLayers,一个圆弧一个,每个圆弧安装一个完整的圆弧,线帽样式设置为圆角。

然后您想将 strokeEnd 属性 设置为较小的值(尝试 .05)。这将导致形状仅绘制其弧度的 5%。

最后,您想将 CAAnimations 提交给每个形状层,使 strokeEnd 值从起始值到 1.0 进行动画处理。这将使绘制完整圆的圆弧动画化。

我没有现成的示例代码供您使用。我确实有一个用 Objective-C 编写的示例项目,它使用非常相似的技术创建一个 "clock wipe" 动画,使用 CAShapeLayer 作为遮罩层。

看看 Github 上的项目“iOS CAAnimationGroup demo”中的时钟擦除动画。

我写了一个 UIView 子类,它完全符合您的要求。您只需提供一个环数组以及一些其他参数,它就会为您处理所有设置和管理。

https://github.com/lionheart/ConcentricProgressRingView

UIViewController 的顶部,导入模块:

import ConcentricProgressRingView

然后,在您的 viewDidLoad:

let rings = [
    ProgressRing(color: UIColor.redColor()),
    ProgressRing(color: UIColor.blueColor()),
]

let margin: CGFloat = 2
let radius: CGFloat = 80
let progressRingView = ConcentricProgressRingView(center: view.center, radius: radius, margin: margin, rings: rings, defaultWidth: 20)
view.addSubview(progressRingView)

实例化 ConcentricProgressRingView 实例后,使用 setProgress.

将特定环动画化为百分比
ring.arcs[1].setProgress(0.5, duration: 2)

在幕后,这只是使用 CABasicAnimation 并设置了一些使其看起来像 "right" 的参数。我知道你没有使用 Swift,但如果你想要具体的指示,只需查看源代码,看看我是如何解决它的。希望这对您有所帮助!