gpt4 book ai didi

ios - 为什么 2π 旋转动画不适用于 CALayer.transform?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:22:10 26 4
gpt4 key购买 nike

为什么直接使用CATransform3D 进行transform 不起作用

let rotationAnimation1 = CABasicAnimation(keyPath: #keyPath(CALayer.transform))
rotationAnimation1.toValue = CATransform3DMakeRotation(.pi * 2, 0, 0, 1)
rotationAnimation1.duration = 1

但是使用 CGFloat 进行 transform.rotation 可以吗?

let rotationAnimation2 = CABasicAnimation(keyPath: "transform.rotation")
rotationAnimation2.toValue = CGFloat.pi * 2
rotationAnimation2.duration = 1

这是 Playground一起玩。

最佳答案

重要的是要注意 transform 属性的动画不是通过分量矩阵插值完成的,而是通过将开始和结束转换分解为基元来完成的组件(旋转、平移等),然后从插值组件重新创建转换。

让我们考虑恒等和 2π 旋转变换之间的 2 秒动画,并问问自己“在 1 秒动画过去后​​会有什么变换?”。这两个矩阵本质上都是 0 弧度旋转。 00 之间的 50% 插值仍然是 0,因此 1 秒后的最终矩阵也有 0弧度旋转。

当您直接插入 transform.rotation 时,Core Animation 已经有了可用的原始组件——您实际上只是将旋转传递给它,而无需进行分解。 0 之间的 50% 插值是 π 因此 1 秒后的最终矩阵是预期的 π 弧度旋转。

关于ios - 为什么 2π 旋转动画不适用于 CALayer.transform?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44813882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com