我正在用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动画--零控制。
谢谢你的建议
发布于 2020-08-04 01:55:16
您正在使用的UIView类函数UIView.animate(withDuration:delay:options:animations:completion:)
没有为您提供您所询问的任何内容(在动画中查找特定时间、暂停/恢复、获取当前动画位置的能力)。
也就是说,不同的UIView.animate()
函数通过创建CABasicAnimation
动画并在视图的层上运行它们来工作。可以使用其中一个UIView.animate()
函数创建动画,然后进入结果层动画并执行您所描述的操作。它没有很好的文档,令人困惑和繁琐,但它是可能的。我在2015年写了一篇博文,展示了如何(用Objective-C) http://wareto.com/keyframe-view-animations来做这些事情
这篇文章的代码可以在https://github.com/DuncanMC/KeyframeViewAnimations上找到
可以通过操纵层的speed、beginTime和timeoffset属性来暂停、恢复或来回移动层动画。
我已经有几年没有看过这段代码了,也没有尝试在Swift中重写它,但如果你想知道如何做,它确实可以作为一个路线图。(请注意,它既复杂又繁琐。)
正如TeeJaay提到的,有一个较新的动画类,UIViewPropertyAnimator
,它支持暂停和恢复动画,将它们移动到特定点等。如果你需要这些功能,我建议你去看看。你应该能够在网上找到它的教程。
https://stackoverflow.com/questions/63238898
复制相似问题