我有一个UIView根和一个UIView A作为其子视图
我不允许root被旋转,所以我在root类中写
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return NO;}
但我允许根的子视图(A)被旋转,所以在A类中,我写
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;}
但似乎root及其子视图A都无法旋转。
我应该如何允许A旋转而不是根?
感谢
答案 0 :(得分:3)
视图不响应shouldAutorotateToInterfaceOrientation,视图控制器可以。如果视图控制器表示它将旋转,则其视图和所有子视图将旋转。如果您的视图控制器说它不会旋转,那么它的视图将不会旋转,它的子视图也不会旋转。
根据您想要做的事情,有两种方法可以解决您的问题:
UIApplication
提供了一种将关键窗口作为UIWindow对象的方法,这可能是您想要的第一个想法。 UIWindow继承自UIView,因此所有用于添加和排列子视图的标准机制都适用。
对于后者,您需要在相关视图上设置变换。从superview获取变换,得到反转并在视图上设置它。有关详细信息,请参阅CGAffineTransform。 CoreAnimation问题提到,通过最短路径(如CoreAnimation将采用)从一个旋转到一个180度的过渡给出了两个可能的解决方案 - 一个顺时针,一个逆时针。实际上,在纵向模式下,您需要为视图的变换添加不可见的偏差,以确保如果您在纵向和纵向之间上下颠倒,CoreAnimation会选择正确的偏移。如果您使用iPhone,那么不支持该设备上的UIInterfaceOrientationPortraitUpsideDown
(大多数Apple应用程序都不支持)是完全可以接受的,因此实际上可能更容易不支持该方向。