【问题标题】:iOS Uniform scale subviews with superviewiOS 统一缩放子视图和超级视图
【发布时间】:2011-11-19 18:54:59
【问题描述】:

我有一个应用程序,允许用户以多个方向将视图拖到屏幕上。所以假设我处于纵向模式,我的超级视图是 768x1024。假设我将 10 个不同的项目拖到该超级视图上。这些项目被缩放、旋转等。然后我旋转设备,我的超级视图缩小到 576x768。如何让我的所有子视图保持它们的位置并相对于新的较小尺寸进行转换?所以从本质上讲,我的 superview 和它的所有子视图应该看起来和它们在纵向时完全一样,除了所有东西都被缩小了。

而且,如果我在横向视图中并且所有内容都“缩小”了,然后我拖动另一个视图并将其缩小以适应它,该怎么办。当设备旋转回纵向时,我需要将新视图放大到适当的位置和大小

【问题讨论】:

    标签: iphone objective-c ios ipad


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您还可以直接覆盖视图的layoutSubviews(),并根据视图的尺寸分配子视图的变换。这样,您仍然可以在视图和可能的其他同级 UI 项目中使用自动布局的好处,同时您可以在不使用自动布局的情况下手动自定义子视图的框架和/或变换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多