iOS统一比例子视图与superview

时间:2011-11-19 18:55:00

标签: iphone objective-c ios ipad

我有一个应用程序,允许用户以多个方向将视图拖动到屏幕上。所以,让我说我的肖像模式,我的超级视图是768x1024。让我们说我将10​​个不同的项目拖到超级视图上。这些项目是缩放,旋转等。然后我旋转设备,我的超级视图缩小到576x768。如何让我的所有子视图保持其位置并相对于新的较小尺寸进行转换?所以从本质上讲,我的超级视图及其所有子视图应该看起来与他们在肖像中所做的完全一样,除了所有内容都已按比例缩小。

而且,如果我在风景中,一切都是"缩小"然后我拖动另一个视图并将其缩小以适应。当设备旋转回肖像时,我需要新的视图在适当的位置和大小放大

2 个答案:

答案 0 :(得分:4)

这里最简单的方法是使用视图的transform属性。在这种情况下,您可以阻止视图在旋转时自动调整大小,并使用视图控制器的willAnimateRotationToInterfaceOrientation:duration:方法在超级视图上设置变换。您可以使用CGAffineTransformMakeScale创建一个可以放大或缩小所有内容的转换;你可能想要一个用于风景,只需使用nil变换用于肖像(反之亦然)。

这会将新视图拖动到您的超级视图中变得复杂,因为它已被转换,但是一旦您获得了视图,它们在调整大小时应该正常运行。对于新视图,您必须计算(可能使用convertRect:fromView:UIView的方法)一旦添加新的子视图,矩形将是什么。

答案 1 :(得分:0)

您还可以直接覆盖视图的layoutSubviews(),并根据视图的尺寸分配子视图的变换。通过这种方式,您可以在自动布局的同时手动自定义子视图的框架和/或变换,从而获得在视图和其他同级UI项目中使用自动布局的好处。