我想知道在哪些情况下我们应该使用其中的任何一个作为最适合的?
在下面的blog https://www.hackingwithswift.com/ios10中,在“重新访问动画”部分中编写的示例中,我们是否可以使用“CABasicAnimation”(表示暂停和恢复动画)重新应用相同的要求?
从我所收集到的信息来看,当我们使用UIView.animate时(...)方法时,它返回一个void,因此我们无法在动画完成之前控制动画,因为我们无法像在UIViewPropertyAnimator中那样获得可处理的返回值(另外,这里我们使用“isRunning”来检查动画的进度。)同样在CABasicAnimation中,我们没有任何进度检查运行动画。2请纠正我,如果我的假设是错误的。3谢谢。
1条答案
按热度按时间vq8itlhq1#
顶级域名
背景
所有这些API都很棒,而且它们的用例都略有不同。
1.虽然UIKit和Core Animation都提供动画支持,但它们给予对视图层次结构的不同部分的访问。
使用UIKit时,动画是使用
UIView
对象执行的。使用UIKit时可用于动画的属性有:frame
bounds
center
transform
alpha
backgroundColor
contentStretch
虽然核心动画提供了对视图底层的访问,但它提供了一组不同的属性,如下所述(值得注意的是,由于视图和层错综复杂地链接在一起,对视图层的更改会影响视图本身):
有关这方面的更多阅读,请参阅此Apple Developer文稿。
UIView的动画方法
在我看来,这些仍然是最容易使用的。非常简单的API,没有太大的代码足迹。我用它来做简单的发射和忘记动画(如使按钮弹出时选择),或当我想做一个复杂的关键帧动画,因为它的关键帧支持是伟大的。
示例:
核心动画
也许使用起来不太直接,但是当你想动画层属性而不是视图属性时,你就需要它了,如上所述。例如圆角半径、阴影和边框。
示例:
对于更详细的核心动画,this是一个伟大的文章(不是我写的)。
UI视图属性动画制作器
这是iOS 10中新增的一款基于视图的动画API,顾名思义,它与UIView的动画方式有一些不同之处,最主要的是它支持交互式动画,并允许动态修改动画。你可以暂停、倒带或擦除动画,也可以添加更多的动画块,或者在播放动画时反转动画。这使得它非常强大。当我想让用户控制动画时,我会使用它。通过在animator对象上设置一个
fractionComplete
属性,可以很容易地将其连接到平移手势识别器或强制触摸识别器(甚至是使用KVO的键)。如前所述,您还可以存储对
UIViewPropertyAnimator
的引用,并在动画期间更改其动画或完成块。示例:
}
值得注意的是,如果您觉得需要同时使用
UIView.animate
和UIView.animateKeyframes
,您实际上可以在UIViewPropertyAnimator
动画块中使用这两个动画块。如果你想要一个更详细的
UIViewPropertyAnimator
的例子,我写了一个关于here的小教程。