UIKit:CGAffineTransforms和Composited动画

时间:2011-07-11 21:38:07

标签: iphone objective-c ios uikit

我注意到,在UIKit中制作动画时,某些类型的动画可以使用标准的基于块的动画进行合成,而其他动画则不能。例如,view.transform会干扰view.frame,但不会干扰view.center。这些东西都记录在哪里吗?

在相关的说明中,由于这些合成问题,我经常使用主要使用CGAffineTransforms的动画,因为它们可以非常容易地合成。这是一个好主意吗?似乎应用变换在引擎盖下不同于简单地更改框架,因此我不确定是否应该使用它们来永久移动视图或更改其大小。 CGAffineTransforms和view.frame相关的更改是否重叠?

谢谢!

1 个答案:

答案 0 :(得分:0)

对于它的价值,这是Apple对此的立场:

  

通常,您可以根据需要修改视图的transform属性   实现动画。例如,您可以使用此属性   创建围绕其中心点旋转的视图动画。您   不会使用此属性对您的视图进行永久性更改,   例如在其超级视图中修改其位置或大小视图   坐标空间。对于这种类型的更改,您应该修改框架   取而代之的是矩形。

来源:View Programming Guide for iOS, View and Window Architecture

(我想一个例外是永久旋转的视图,这对于帧修改是不可能的。)

我还确定CGAffineTransforms似乎修改了视图的底层渲染图像,而不是其内容,因此(例如)应用CGAffineTransformScale与扩展框架根本不同。我不确定这是否一定是真的,或者它是否依赖于contentMode /其他因素。

我还不完全清楚视图的框架,边界和变换是如何相互作用的。例如,您可以在应用旋转后设置视图的框架,它将相对于旋转的视图,而修改边界将应用转换到视图预旋转(IIRC)。