2010-12-01 131 views
0

我有一个UIView根和一个UIView A作为其子视图iphone - 子视图旋转问题

我不允许root旋转,所以我的根类

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return NO;} 

写,但我允许根的子视图(A)旋转,所以在上课,我写

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return YES;} 

但似乎根和其子视图不可旋转。

我该如何让A旋转但不是根?

感谢

回答

3

意见不回答shouldAutorotateToInterfaceOrientation,视图控制器做。如果你的视图控制器说它会旋转,那么它的视图和所有的子视图将会旋转。如果你的视图控制器说它不会旋转,那么它的视图将不会旋转,它的子项也不会旋转。

有两种可能的方法来解决你的问题,这依赖于你想要做什么:

  • 如果非旋转的观点是旋转一切的背后,你可以从视图控制器删除它,将viewWillAppear添加到视图控制器后面的主应用程序窗口中:并在viewDidDisappear上再次移除它:
  • 如果非旋转和旋转视图需要以更复杂的方式混合,您可以捕获willAnimateRotationToInterfaceOrientation:duration:和在非旋转视图上设置合适的逆变换。所以它旋转,然后不旋转。由于CoreAnimation的工作方式,您需要在特定的180度旋转之间获得正确的行为有点棘手。

UIApplication提供了一种将关键窗口作为UIWindow对象获取的方法,这可能是您想要的第一个想法。 UIWindow继承自UIView,因此所有用于添加和排列子视图的标准机制都适用。

对于后者,您需要在相关视图上设置变换。从超视图中获取变换,获取反转并将其设置在视图上。有关更多详细信息,请参见CGAffineTransform。 CoreAnimation问题提到,从一个旋转到180度不同的最短路径(如CoreAnimation将采用)的过渡给出了两个潜在的解决方案 - 一个顺时针和一个逆时针。在实践中,如果在纵向和纵向之间旋转,您需要在纵向模式下为视图的变换添加不可见的偏差,以确保CoreAnimation选择正确的偏移。如果你使用的是iPhone,那么在该设备上不支持UIInterfaceOrientationPortraitUpsideDown是完全可以接受的(大多数苹果应用程序都不会),所以实际上可能只是不支持这种定位。

+0

对不起,我说的不清楚。是的,它在ViewController中。但是,您的意思是,如果父视图设置为非旋转,将其子视图设置为可以旋转并不容易? – Jack 2010-12-01 15:17:04