我有一个类似网格的缩略图滚动视图,我首先初始化所有缩略图,然后设置其框架:
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
作为重新定位目的,是否真的有好处?
答案 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
属性。