2011-04-19 70 views
3

我需要一个视图控制器(在ipad上)共享两种模式,一种是纵向模式,另一种是横向模式。实际上,我非常想模仿UISplitViewController的功能,但我希望能够不使用顶级视图控制器。除了HIG指南之外,我还有一个普遍问题,我认为任何在方向之间切换观点的人都会遇到。当在ios上旋转时改变子视图

1)为了在视图之间提供平滑过渡,我想在willRotateToInterfaceOrientation:duration内调用我的视图更改(和动画),而不是doRotateToInterfaceOrientation方法。问题是,在这个阶段,视图框和范围尚未改变他们的新的,所以你最终不得不手动设置框,如:

subview.frame = CGRectMake(0,0,320,768); 

,而不是其他更好的,也许:

subview.frame = CGRectMake(0,0,320, self.view.frame.height); 

2)此外,即使您尝试使用这些恶作剧,如果视图自动调整其子视图,您仍然无法获得它。如果禁用子视图的自动尺寸调整,那么像这样的东西,甚至不工作了:

subview.frame = self.view.frame; //because then you'd have to always specify the exact rect. 

没有人有任何见解提供对此有何看法?

谢谢!

回答

5

请尝试使用willAnimateRotationToInterfaceOrientation:duration:代替。另外,如果您在子视图上正确设置了自动识别掩码,则不需要关心主视图是否已经调整过。只需调整子视图的大小,使其适合主视图内的大小,因为它现在可以调整大小,并且只会起作用。

如果您没有(或无法)正确设置自动调整掩码,则应该已经拥有处理主视图layoutSubviews方法中大小更改的代码。所以再一次,你不应该在乎主视图是否已经调整大小。

+0

真棒,willAnimateRotationToInterfaceOrientation工作! – Ying 2011-04-19 19:27:02

+0

顺便说一下,自动调整掩码不适用于我,因为视图基于方向被删除并添加到屏幕上。然而,我会和他们一起做爱,看看它是否有效。 – Ying 2011-04-19 19:28:58