我想知道在哪些情况下我们应该使用它们中的任何一种作为最佳选择?
在下面的博客https://www.hackingwithswift.com/ios10中,使用“动画重新访问”部分编写的示例,我们可以使用“CABasicAnimation”重新应用相同的要求,这意味着暂停和恢复动画吗?
根据我收集的内容,当我们使用UIView.animate(...)方法时,它返回一个void,因此我们将无法在完成之前控制动画,因为我们没有得到返回值当我们进入UIViewPropertyAnimator时也要工作(此外,我们还有“isRunning”来检查动画的进度。) 同样在CABasicAnimation中,我们没有任何运行动画的进度检查。 如果我的假设是错误的,请纠正我。 谢谢。
答案 0 :(得分:28)
所有这些API都很棒,而且它们的使用情况略有不同。
在我看来,这些仍然是最容易使用的。非常直接的API,而不会产生太大的代码占用空间。我将其用于简单的即发即弃动画(例如在选中时弹出按钮),或者当我想制作复杂的关键帧动画时,因为它的关键帧支持它很棒。
使用时可能不那么简单,但只要您想要为图层属性设置动画而不是视图属性,就需要它。这些例子包括角半径,阴影和边框。
这仅在iOS10之后可用,因此您可能希望回退到旧版iOS的先前API之一。顾名思义,这是另一种基于视图的动画API。与UIView的动画方法不同的是它支持交互式动画。您可以暂停,快退和擦除动画,这使它非常强大。当我希望用户控制动画时,我会使用它。擦洗通过设置动画师的fractionComplete属性来工作,该属性可以很容易地连接到平移手势识别器或力触摸识别器(甚至是使用KVO的键)。
您还可以存储对UIViewPropertyAnimator
的引用,并在动画期间更改其动画或完成块。
值得注意的是,如果您觉得需要同时使用UIView.animate
动画块,则可以实际使用UIView.animateKeyframes
和UIViewPropertyAnimator
。
如果您想了解更多信息,我写了一篇关于使用UIViewPropertyAnimator
here的小教程。