0

我的 iPad 应用程序允许用户创建 UIView 并将它们放在主视图上。所以这些视图是通过编程而不是在 xib 文件中创建的。然后它会记住这些 UIView 的坐标。然后,用户可以选择稍后显示此 UIView 集合。

----------------   ----------------
|Collection 1 >| > |          |   |  
|Collection 2  |   | View A   |   |
|Collection 3  |   |          |   |
|              |   |--------------|
|              |   |     |        |
|              |   |     | View B |
|              |   |     |        |
----------------   ----------------

因此,您可以在上面看到Collection 1已被选中。

现在,该应用程序应该可以在横向和纵向中使用。因此,如果以纵向创建视图,然后以横向显示,我该如何处理坐标?反之亦然?甚至在创建视图时。

在我的情况下,我希望 UIViews 按比例调整,如果视图在一个方向上相互邻接,那么它们也应该在另一个方向上邻接。所以上面变成了风景:

----------------   ------------------
|Collection 1 >| > |          |     |  
|Collection 2  |   | View A   |     |
|Collection 3  |   |----------------|  
|              |   |     | View B   |
|              |   |     |          |
|              |   ------------------  
|              |    
---------------- 

我想我要问的部分内容是:有没有办法在不实际旋转的情况下获得另一个方向的坐标?

4

3 回答 3

1

您应该为子视图(视图 A 和视图 B)“打开”所有调整大小的蒙版。

viewA.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin |
                         UIViewAutoresizingFlexibleWidth |
                         UIViewAutoresizingFlexibleRightMargin |
                         UIViewAutoresizingFlexibleTopMargin |
                         UIViewAutoresizingFlexibleHeight |
                         UIViewAutoresizingFlexibleBottomMargin;

如果你这样做,那么视图的所有边缘将保持它们的位置作为父视图空间的一部分。例如,视图 A 的框架可以被认为是 (left, top, width, height) = (0%, 0%, 80%, 50%) 而视图 B 的框架是 (40%, 50%, 60%, 50%) . 当您旋转视图的底部和顶部时,仍然是 50%,尽管这在数值上是不同的值。视图 A 的左侧和顶部仍然紧靠父视图的边缘。即使这些边距是灵活的,如果边距为零,它们也不会改变。B 的右边缘和下边缘相同。

于 2013-05-28T15:52:04.613 回答
1

您只需要设置自动调整大小的蒙版。像 view.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

编辑:我刚刚意识到,我忘记了视图 b 的情况。

对于主视图,您需要设置:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

对于视图 A:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

由于视图 A 的高度会降低,因此视图 B 必须向上移动。我们需要设置灵活的上边距掩码。

对于视图 B:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight | UIViewAutoresizingFlexibleTopMargin

在提供自动调整大小的掩码时,我假设您将视图放置在相对的顶部。这意味着您已经设置了框架,或者只是一个像 10.0 这样的值,或者相​​对于放置在它自己的视图上方的元素,比如viewB.frame = CGRectMake(xCoordinate, viewA.frame.origin.y + viewA.frame.size.height, width, height)

如果你让它们像底部相对,它就行不通了viewB.frame = CGRectMake(xCoordinate, mainView.frame.size.height - 200.0, width, height)

于 2013-05-28T15:15:51.030 回答
0

您可以移出逻辑以在单独的方法中处理坐标,并在usingShouldAutorotateToInterfaceOrientationshouldAutorotate依赖于 ios 版本中调用此方法

于 2013-05-28T15:22:22.573 回答