转换与改变UIViews的帧?

时间:2015-07-01 19:22:59

标签: ios uiview orientation transform frame

将转换和比例转换应用于视图并简单地将它们设置为新框架之间的差异是什么?只有转换可以动画,或者有更多的事情需要考虑?

我特别想到在更改设备方向时应改变位置和/或大小的视图。

谢谢

2 个答案:

答案 0 :(得分:1)

一个关键点,特别是在您更改设备方向时,是在旋转后重新计算框架。在旋转之前设置框架不会影响旋转后的框架。在这种情况下,使用变换可能更有用,因为将根据transform属性重新计算帧。来自Apple的documentation的一个警告:

  

警告   如果transform属性不是identity变换,则此属性的值是未定义的,因此应该被忽略。

我发现设置缩放变换通常不会导致我想要的行为;它实际上是拉出视图,它(取决于视图的设置)可以拉伸视图中的所有图像,按钮等,使其看起来很糟糕。

通常我实际想要的行为实际上是改变视图上的约束。因为基于约束在旋转之后重新计算框架,所以与简单地改变框架相比,这种方法与设备旋转一起使用更加友好。也可以对约束变化进行动画处理。

最后,我最近发现的一个非常有用的东西是可以为你在界面构建器中创建的约束创建一个插座,所以你仍然可以在界面构建器中布局你的视图,然后以编程方式更改约束。

答案 1 :(得分:0)

框架描述了超视图中视图的大小和相对位置(原点),而变换时CGAffineTransform是一个3乘3的矩阵,描述了另一个坐标系中的坐标系。有关更多详细信息,请参阅CGAffineTransform的参考:

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGAffineTransform/#//apple_ref/c/macro/CGAffineTransformMake

在iOS中转换视图对象的最常用方法:

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGContext/index.html#//apple_ref/c/func/CGContextFlush

另外,这是另一个可能有用的答案:

IOS view transformation modifies frame?