更改视图的值及其图层值

时间:2016-04-24 16:12:14

标签: ios objective-c uiview calayer cabasicanimation

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

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

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

1 个答案:

答案 0 :(得分:2)

UIView只是CALayer的花哨包装 - 带来UIResponder个事件& 许多其他事物中的动画便利。

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

  • 视图frame& bounds属性应始终反映层等效。

  • transform稍微复杂一些,因为视图类型为CGAffineTransform - 而layer则为CATransform3D。如果图层的变换可以表示为CGAffineTransform,那么您可以在图层上设置后从视图中访问它。如果无法表示,则其值未定义。

因此,是的,您在frame更改transform时更新UIViewCALayer是正确的。虽然请注意这些属性不会反映动画的“飞行中”值 - 但您需要访问图层的presentationLayer

另请注意,@ par& @jrturton提到,如果图层的变换不是标识变换,那么frame是未定义的,因此您不应该使用它。