将UIView坐标从纵向转换为横向,反之亦然

时间:2013-05-28 15:05:42

标签: ios objective-c uiview orientation

我的iPad应用程序允许用户创建UIView并将它们放在主视图上。所以这些视图是以编程方式创建的,而不是在xib文件中。然后它记得这些UIViews的合作伙伴。然后,用户可以选择稍后显示此UIViews集合。

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

所以,上面你可以看到Collection 1已被选中。

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

在我的情况下,我希望UIViews按比例调整,如果视图在一个方向上相互邻接,那么它们也应该在另一个方向上相邻。所以上面的内容就是这样:

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

我想我要问的部分是:有没有办法在不实际旋转的情况下获得其他方向的合作?

3 个答案:

答案 0 :(得分: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)

这样的底层亲戚,它就无法运作

答案 1 :(得分:1)

你应该转过" on" all 调整大小掩码,用于子视图(视图A和视图B)。

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

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

答案 2 :(得分:0)

您可以在单独的方法中移出逻辑来处理coords,并在usingShouldAutorotateToInterfaceOrientationshouldAutorotate中依据ios版本调用此方法