an0*_*an0 2 core-animation ios
为什么直接使用CATransform3Dfortransform不行
let rotationAnimation1 = CABasicAnimation(keyPath: #keyPath(CALayer.transform))
rotationAnimation1.toValue = CATransform3DMakeRotation(.pi * 2, 0, 0, 1)
rotationAnimation1.duration = 1
Run Code Online (Sandbox Code Playgroud)
但用于CGFloat作品transform.rotation?
let rotationAnimation2 = CABasicAnimation(keyPath: "transform.rotation")
rotationAnimation2.toValue = CGFloat.pi * 2
rotationAnimation2.duration = 1
Run Code Online (Sandbox Code Playgroud)
这里是可以玩的游乐场。
需要注意的是,transform属性的动画不是通过按组件矩阵插值来完成的,而是通过将开始和结束变换分解为原始组件(旋转、平移等)然后重新创建来完成的插值分量的变换。
让我们考虑一个在恒等和 2\xcf\x80 旋转变换之间的 2 秒动画,并问自己“1 秒动画结束后会出现什么变换?”。两个矩阵本质上都是0弧度旋转。0和之间的 50% 插值0仍然是0,因此 1 秒后的最终矩阵也有0弧度旋转。
当您直接插值时,transform.rotationCore Animation 已经具有可用的原始组件 \xe2\x80\x93 ,您实际上只是将旋转交给它,无需进行分解。0和之间进行 50% 插值,2\xcf\x80因此\xcf\x801 秒后的最终矩阵是预期的\xcf\x80弧度旋转。
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |