2011-11-19 99 views
3

我有一个应用程序,允许用户在多个方向上将视图拖到屏幕上。所以我们可以说我处于肖像模式,我的超级视角是768x1024。比方说,我将10个不同的项目拖到该超级视图上。这些项目被缩放,旋转等。然后我旋转设备,我的超级视图缩小到576x768。如何让我的所有子视图保持其位置并相对于新的较小尺寸进行转换?所以实质上,我的超视图和它的所有子视图应该看起来与他们在肖像时完全一样,只是一切都缩小了。iOS与超级视图的统一比例子视图

而且,如果我在风景和一切都“收缩”下来,然后拖动另一个视图并将其缩小到合适的位置,该怎么办?当设备旋转回肖像时,我需要新的视图来放大适当的位置和尺寸。

回答

4

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

这会使新视图拖入您的超视图变得复杂,因为它已经被转换,但是一旦您有了视图,它们在调整大小时应该正确行为。对于新的视图,你必须计算(也许使用UIView的convertRect:fromView:方法),一旦你添加一个新的子视图,矩形将会是什么。

0

您也可以直接覆盖您的视图的layoutSubviews()并根据视图的维度分配您的子视图的变换。这样,您仍然可以获得使用自动布局视图和潜在的其他同级UI项目的好处,同时您可以手动自定义子视图的帧和/或变换而无需自动布局。

相关问题