iOS:在横向开始时调整添加到应用程序的新视图的大小和位置
Posted
技术标签:
【中文标题】iOS:在横向开始时调整添加到应用程序的新视图的大小和位置【英文标题】:iOS: Resizing and positioning a new view added to app started in landscape 【发布时间】:2012-01-31 12:40:32 【问题描述】:我想这可能已经被问过了,但是在阅读了很多之后,我不确定我是否找到了答案。
当应用旋转到横向时,我正在向主视图添加一个新视图。新视图的构造和添加代码如下:
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】:在玩了一些之后,我想出了这个:
// 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);
];
它有效,我只是想知道是否有更好的解决方案。
【讨论】:
以上是关于iOS:在横向开始时调整添加到应用程序的新视图的大小和位置的主要内容,如果未能解决你的问题,请参考以下文章