更改视图的值及其图层的值

Changing a view's values and its layer's values

我正在使用 CABasicAnimation 为 ImageView 设置动画。 我将它的图层向左、向右、向上和向下移动,有时我会将它放大然后将其重置为原始大小等。

我正在对它的 layer 进行所有这些操作,所以我想我可能还需要移动和缩放真实的东西以及它的 layer 但是当我用点击手势测试它时看看它是否真的只是停留在它开始的地方,它不是。因此,就我而言,我不再需要更改其 view 的框架。

更改视图图层的值是否也会更改其视图的值?

A UIView 只不过是 CALayer 的精美包装器 – 在 许多 其他事物中带来 UIResponder 事件和动画便利.

许多 UIView 属性实际上只是基础 CALayer 属性的转发版本,定义纯粹是为了方便。

  • 视图的 framebounds 属性应始终反映图层等效项。

  • transform 稍微复杂一些,至于视图它的类型是 CGAffineTransform – 而在 layer 上它是 CATransform3D。如果层的变换可以表示为 CGAffineTransform,那么在层上设置它后,您将能够从视图访问它。如果不能表示,那么它的值是未定义的。

因此,是的,您说在 UIView 上更改 CALayer 时不需要更新 frametransform 是正确的。尽管请注意,这些属性不会反映动画的 'in-flight' 值——为此您需要访问图层的 presentationLayer

另请注意,正如@par 和@jrturton 提到的那样,如果图层的变换不是恒等变换,则 frame 未定义,因此您不应使用它。