我认为这可能是有问题的,但经过大量阅读后,我不确定我是否找到了答案。
当应用程序旋转到横向时,我正在向主视图添加新视图。构建新视图并将其添加到以下代码中:
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点。
答案 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);
}];
它有效,我只是想知道是否有更好的解决方案。