iOS:调整和定位添加到横向开始的应用的新视图

时间:2012-01-31 12:40:32

标签: ios uiview landscape

我认为这可能是有问题的,但经过大量阅读后,我不确定我是否找到了答案。

当应用程序旋转到横向时,我正在向主视图添加新视图。构建新视图并将其添加到以下代码中:

UIView * newView = ....
[rootView addSubview:newView];

但是因为当我添加新视图时模拟器被旋转到横向,我得到了这个:

+------------------------------------------------------+
+  +---------------------------------------------+     +
+  |                          |                  |     +
+  |                          |                  |     +
+  |      newView             |   rootView       |     +
+  |      (Landscape          |   (Landscape)    |     +
+  |   but portrait size)     |                  |  () +
+  |                          |                  |     +
+  |                          |                  |     +
+  |                          |                  |     +
+  |                          |                  |     +
+  +---------------------------------------------+     +
+------------------------------------------------------+

所以我添加newView.bounds = rootView.bounds; newView.center = rootView.center;认为将newView直接放在rootView的顶部,但我得到了这个:

+------------------------------------------------------+
+  +---------------------------------------------+     +
+  |                                             |     +
+  |                                             |     +
+  |--------------------------+   rootView       |     +
+  |                          |   (Landscape)    |     +
+  |         newView          |                  |  () +
+  |  (Landscape size,        |                  |     +
+  |   but offset)            |                  |     +
+  |                          |                  |     +
+  |                          |                  |     +
+  +---------------------------------------------+     +
+------------------------------------------------------+

我试图弄清楚为什么他们是不同的,即使我已经将界限和中心设置为相同。

转出我得到的观点:

 rootView; frame = (0 0; 768 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x98870a0>>
 newView ; frame = (-128 128; 1024 768); autoresize = W+H; layer = <CALayer: 0x6e470a0>>

因此看起来rootView仍然是768w x 1024h,只是通过变换旋转,在设置边界和中心后,新视图为1024w x 768h并偏移128点。

1 个答案:

答案 0 :(得分:0)

经过多次游戏后,我想出了这个:

 // Position the new view offscreen.
CGFloat width = rootView.bounds.size.width;
CGFloat height = rootView.bounds.size.height;
newView.frame = CGRectMake(0, height, width, height);
[rootView addSubview:newView];

 // Animate to the center of the view.
[UIView animateWithDuration:1.0 animations:^{
    newView.frame = CGRectMake(0,0, width, height);
 }];

它有效,我只是想知道是否有更好的解决方案。