2013-05-28 58 views
0

我的iPad应用程序允许用户创建UIView并将它们放置在主视图上。所以这些视图是以编程方式创建的,而不是xib文件。然后它会记住这些UIViews的合作伙伴。用户可以选择稍后显示这个UIViews集合。将UIView坐标从纵向转换为横向,反之亦然

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

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

现在,应用程序应该可以在横向和纵向使用。因此,如果以纵向创建视图,然后在横向显示视图,我怎样才能处理合作伙伴?反之亦然?即使在创建视图时也是如此。

在我的情况下,我希望UIViews按比例调整,如果视图在一个方向上彼此邻接,那么它们也应该紧靠在另一个方向上。所以上面成为该景观:

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

我想的什么,我问的是一部分:是否有获得共同ORDS将在其他方向没有什么实际旋转的方式吗?

+0

您打算使用自动布局吗?视图布局的方法取决于你是否有所不同。 – lxt

+0

我很高兴使用自动布局,但根据我的经验,解决此问题可能相当困难 – cannyboy

+0

在这种情况下,自动调整大小的遮罩将成为您的答案。我认为有人已经沿着这种方式向你发送了:) – lxt

回答

1

你只需要设置自动调整掩码。像view.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

编辑:我刚刚意识到,我忘了案件的意见b。

主视图,你需要一套:UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingMaskFlexibleHeight

对于视图答: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)

+0

您是指主视图还是子视图?不能得到这个工作 – cannyboy

+0

在你的情况所有人。您的主视图将被调整大小,因为窗口大小已更改。子视图将被调整大小,因为主视图的大小已经改变。或者,您可以以不同的子视图子视图设置autoresizingMasks – Mert

+0

请注意,您设置的框架用于纵向定位。当您进入横向模式时,autoresizingMask会更改帧。因此,编程和设置框架时只考虑纵向和自动识别,Mask会根据您的比例来改变它们,并取决于您如何设置它们。你可以在这里找到可能性http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html,当然你可以将它们结合起来。 – Mert

0

它不会工作,你可以移动出来的逻辑来处理COORDS在一个单独的方法,并调用该方法usingShouldAutorotateToInterfaceOrientationshouldAutorotate依赖于IOS版本

1

你应该把“上” 所有的调整口罩,为子视图(视图A和视图B) 。

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

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

相关问题