控制swift的UIView动画



我正在用UIView动画功能测试一些东西,我对你对动画缺乏控制感到有点困惑。也许我错过了什么

UIView.animate(
withDuration: TimeInterval(Int.random(in: 20 ..< 25)),
delay: TimeInterval(cloudConfig.delay),
options: [
UIView.AnimationOptions.curveLinear,
UIView.AnimationOptions.repeat,
],
animations: {
self.view.transform = CGAffineTransform(translationX: width, y: 0)
self.parent!.layoutIfNeeded() // important for the animation
},
completion: { _ in
print("hurray I know when it ends, if it would fire on repeat as well :) it does not")
}
)

该动画只是将视图从左向右移动,并重复该过程。我似乎在api中找不到任何允许我寻找动画的特定时间并从那里开始的东西。或者简单的事情,比如暂停播放,或者获取当前播放位置。有没有什么方法可以控制动画,它几乎就像css动画一样——零控制。

感谢任何提示

您正在使用的UIView类函数UIView.animate(withDuration:delay:options:animations:completion:)不会提供您所要求的任何内容(在动画中查找特定时间、暂停/恢复、ir获取当前动画位置的能力(

也就是说,不同的UIView.animate()函数通过创建CABasicAnimation动画并在视图的层上运行它们来工作。可以使用UIView.animate()函数之一创建动画,然后进入生成的层动画并执行所描述的操作。它没有很好的记录,令人困惑和挑剔,但它是可能的。我在2015年写了一篇博客文章,展示了如何做这些事情(在Objective-C中(http://wareto.com/keyframe-view-animations

该帖子的代码可以在https://github.com/DuncanMC/KeyframeViewAnimations

可以通过操纵层的速度、beginTime和timeoffset属性来暂停、恢复或来回拖动层动画。

我已经好几年没有看过那个代码了,也没有试图在Swift中重写它,但如果你想弄清楚如何做的话,它确实是一个路线图。(小心,它既复杂又繁琐。(

正如TeeJaay所提到的,有一个更新的动画类UIViewPropertyAnimator,它确实支持暂停和恢复动画、将它们清理到特定点等功能。如果你需要这些功能,我建议你看看。你应该能够在网上找到关于它的教程。

最新更新