设置frame.origin与CGAffineTransformMakeTranslation之间的性能差异

时间:2012-05-30 09:37:50

标签: objective-c ios performance cocoa-touch position

我有一个类似网格的缩略图滚动视图,我首先初始化所有缩略图,然后设置其框架:

thumbnail.frame = CGRectMake(0, 0, 100, 100);

然后在willAnimateRotationToInterfaceOrientation上,将这些缩略图重新定位:

thumbnail.transform = CGAffineTransformMakeTranslation(posX, posY);

虽然在上述方法之后检查位置时:

NSLog(@"thumbnail frame x: %f", thumbnail.frame.origin.x);

它将返回包含变换操作的位置,而不是0,0

使用transform而不是为frame设置新UIView作为重新定位目的,是否真的有好处?

2 个答案:

答案 0 :(得分:0)

主要的好处是你可以使用更多类型的仿射变换,比如

  • CGAffineTransformTranslate
  • CGAffineTransformScale
  • CGAffineTransformRotate
  • CGAffineTransformInvert
  • CGAffineTransformConcat

但是frame struct只设置框架。

其他说明:

1)出于性能原因,假设CGAffineTransformMakeTranslation(posX, posY)只更改了center属性,它就像它应该比更改frame属性更快但但谁知道更快。因此,为了重新定位,我会使用这种方式或更改center属性。

2)与CALayer的{​​{1}}相比,transform的{​​{1}}更改了视图的实际位置。

答案 1 :(得分:0)

使用平移变换将在变换的透视图中移动(平移)视图。也就是说,如果您首先旋转视图,然后进行平移,它将沿相对于旋转的方向移动。对于简单的重新排序,我建议改为更改center属性。这样,您仍然可以以有意义的方式使用frame属性。