我使用CABasicAnimation
为ImageView制作动画。
我将它的图层向左,向右,向上和向下移动,有时我会将它缩放得更大,然后将其重置为原始大小等。
我正在对layer
进行所有这些操作,所以我想我可能需要移动&同时缩放真实的东西以及它的layer
但是当我用敲击手势测试它时,看它是否真的只是停留在它开始的地方,它不是。因此,就我而言,我不再需要更改其view
的框架。
更改视图的图层值是否也会更改其视图的值?
答案 0 :(得分:2)
UIView
只是CALayer
的花哨包装 - 带来UIResponder
个事件& 许多其他事物中的动画便利。
许多UIView
属性实际上只是基础CALayer
属性的转发版本,纯粹是为了方便而定义的。
视图frame
& bounds
属性应始终反映层等效。
transform
稍微复杂一些,因为视图类型为CGAffineTransform
- 而layer
则为CATransform3D
。如果图层的变换可以表示为CGAffineTransform
,那么您可以在图层上设置后从视图中访问它。如果无法表示,则其值未定义。
因此,是的,您在frame
更改transform
时更新UIView
或CALayer
是正确的。虽然请注意这些属性不会反映动画的“飞行中”值 - 但您需要访问图层的presentationLayer
。
另请注意,@ par& @jrturton提到,如果图层的变换不是标识变换,那么frame
是未定义的,因此您不应该使用它。