Dun*_*n C 17 animation uiview ios swift uiviewpropertyanimator
我一直在关注UIViewPropertyAnimatoriOS 10中非常酷的新课程.它可以让您轻松地执行暂停,恢复和反向飞行UIView动画等操作.过去,您必须操纵系统创建的基础CAAnimations才能使用UIView动画执行此操作.
新UIViewPropertyAnimator班级有一个属性fractionComplete.它从0.0(动画开始)到1.0(动画结束)不等.如果更改了值,则可以从头到尾"擦除"动画.
我在Github上有一个名为KeyframeViewAnimations的演示项目,它允许你使用滑块来使用相当神秘的CAAnimation技巧来回擦洗UIView和CAAnimations.当动画运行时,滑块从头到尾移动以显示动画的进度.该项目是在Swift发布之前用Objective-C编写的,但Objective-C或Swift中的底层技术是相同的.
我决定使用创建一个等效的项目UIViewPropertyAnimator.有一些怪癖,但它相当简单.我无法弄清楚如何干净利落的一件事是观察动画fractionComplete属性的进度,以便我可以随着动画的进展更新滑块.我尝试在fractionComplete属性上设置KVO(键值观察),但在动画完成之前它不会触发KVO通知.
我落得这样做是建立上一个很小的间隔运行,并查询定时器UIViewPropertyAnimator的fractionComplete反复性和更新滑块,因为它的进展.它有效,但它不是一种非常干净的做事方式.如果有办法获得有关动画进度的通知会好得多.
我希望有一些我想念的东西.
您可以UIViewPropertyAnimator在此链接上查看Github上的基础项目:UIViewPropertyAnimator-test.
从动画师获取进度值的代码是以下代码:
func startTimer(_ start: Bool) {
if start {
timer = Timer.scheduledTimer(withTimeInterval: 0.02,
repeats: true) {
timer in
var value = Float(self.viewAnimator.fractionComplete)
if self.animatingBackwards {
value = 1 - value
}
self.animationSlider.value = value
}
}
else {
self.timer?.invalidate()
}
}
Run Code Online (Sandbox Code Playgroud)
我应该将上面的代码转换为使用CADisplayLink计时器而不是vanilla Timer(NSTimer),但我希望有更好的方法.
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |