iphone-子视图旋转问题

iphone-子视图旋转问题,iphone,uiview,rotation,Iphone,Uiview,Rotation,我有一个UIView根和一个UIView a作为它的子视图 我不允许根旋转,所以我在根类中编写 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return NO;} 但我允许根的子视图(A)旋转,所以在类中,我编写 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation

我有一个UIView根和一个UIView a作为它的子视图

我不允许根旋转,所以我在根类中编写

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return NO;}
但我允许根的子视图(A)旋转,所以在类中,我编写

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;}
但根视图和它的子视图A似乎都不能旋转

我应该如何允许A旋转但不允许根旋转


谢谢

视图不响应shouldAutorotateToInterfaceOrientation,视图控制器响应。如果视图控制器说它将旋转,则其视图和所有子视图将旋转。如果视图控制器说它不会旋转,那么它的视图也不会旋转,它的子视图也不会旋转

有两种可能的方法来解决您的问题,具体取决于您想要做什么:

  • 如果非旋转视图位于所有旋转对象的后面,则可以将其从视图控制器中删除,并在视图出现时将其添加到视图控制器后面的主应用程序窗口中,然后在视图消失时再次删除它:
  • 如果需要以更复杂的方式混合非旋转视图和旋转视图,可以捕获WillAnimateRotationInterfaceOrientation:duration:并在非旋转视图上设置适当的逆变换。所以它先旋转,然后不旋转。由于CoreAnimation的工作方式,在某些180度旋转之间,您需要有点技巧才能获得正确的行为
UIApplication
提供了一种将键窗口作为UIWindow对象获取的方法,这可能是您第一个想法想要的。UIWindow继承了UIView,因此所有用于添加和排列子视图的标准机制都适用


对于后者,您需要在相关视图上设置变换。从superview获取变换,获取逆变换并将其设置在视图上。有关更多详细信息,请参阅。提到的CoreAnimation问题是,从一个旋转到一个180度不同的最短路径(CoreAnimation将采用)的过渡提供了两种可能的解决方案——一种是顺时针,另一种是逆时针。实际上,当处于纵向模式时,需要向视图的变换添加不可见的偏移,以确保CoreAnimation在纵向和纵向倒置之间旋转时选择正确的偏移。如果你在iPhone上,在该设备上不支持
UIInterfaceOrientationGraphitationUpsideDown
(大多数苹果应用程序不支持),这是完全可以接受的,因此不支持该方向实际上可能更容易些。

视图不支持AutorotateTointerFaceOrientation,视图控制器支持。如果视图控制器说它将旋转,则其视图和所有子视图将旋转。如果视图控制器说它不会旋转,那么它的视图也不会旋转,它的子视图也不会旋转

有两种可能的方法来解决您的问题,具体取决于您想要做什么:

  • 如果非旋转视图位于所有旋转对象的后面,则可以将其从视图控制器中删除,并在视图出现时将其添加到视图控制器后面的主应用程序窗口中,然后在视图消失时再次删除它:
  • 如果需要以更复杂的方式混合非旋转视图和旋转视图,可以捕获WillAnimateRotationInterfaceOrientation:duration:并在非旋转视图上设置适当的逆变换。所以它先旋转,然后不旋转。由于CoreAnimation的工作方式,在某些180度旋转之间,您需要有点技巧才能获得正确的行为
UIApplication
提供了一种将键窗口作为UIWindow对象获取的方法,这可能是您第一个想法想要的。UIWindow继承了UIView,因此所有用于添加和排列子视图的标准机制都适用


对于后者,您需要在相关视图上设置变换。从superview获取变换,获取逆变换并将其设置在视图上。有关更多详细信息,请参阅。提到的CoreAnimation问题是,从一个旋转到一个180度不同的最短路径(CoreAnimation将采用)的过渡提供了两种可能的解决方案——一种是顺时针,另一种是逆时针。实际上,当处于纵向模式时,需要向视图的变换添加不可见的偏移,以确保CoreAnimation在纵向和纵向倒置之间旋转时选择正确的偏移。如果你使用的是iPhone,那么在该设备上不支持
UIInterfaceOrientationGraphitoUpsideDown
(大多数苹果应用程序都不支持),这是可以接受的,因此不支持该方向实际上可能更容易一些。

对不起,我刚才说的不清楚。是的,它在ViewController中。但是,您的意思是,如果父视图设置为非旋转,则将其子视图设置为能够旋转并不容易?旋转是否发生取决于当前视图控制器。在视图控制器中显示的视图上,要么全有,要么全无。但是,只有添加到窗口中的一个视图控制器将接收旋转事件。遗憾的是,我无法确定它是第一次添加的,还是仅仅从文档中找到的。对不起,我说的不清楚。是的,它在ViewController中。但是,您的意思是,如果父视图设置为非旋转,则将其子视图设置为能够旋转并不容易?旋转是否发生取决于当前视图控制器。在视图控制器中显示的视图上,要么全有,要么全无。但是,只有添加到窗口中的一个视图控制器将接收旋转事件。遗憾的是,我无法确定它是第一次添加的,还是仅仅从文档中找到的。