繁体   English   中英

iPhone-子视图旋转问题

[英]iphone - subview rotation problem

我有一个UIView根和一个UIView A作为其子视图

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

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

但是我允许旋转根的子视图(A),所以在A类中,我写了

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

但是似乎根及其子视图A都不能旋转。

我应该如何允许A旋转而不是root?

谢谢

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

有两种可能的方法可以解决您的问题,具体取决于您要执行的操作:

  • 如果非旋转视图位于所有旋转对象的后面,则可以将其从视图控制器中删除,然后在viewWillAppear:上将其添加到视图控制器后面的主应用程序窗口中,然后在viewDidDisappear上再次将其删除:
  • 如果非旋转视图和旋转视图需要以某种更复杂的方式混合在一起,则可以捕获willAnimateRotationToInterfaceOrientation:duration:并在非旋转视图上设置合适的逆变换。 因此,它先旋转然后再旋转。 由于CoreAnimation的工作方式,您将需要一些技巧才能在某些180度旋转之间获得正确的行为。

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

对于后者,您需要在相关视图上设置转换。 从超级视图获取变换,获取逆并将其设置在视图上。 有关更多详细信息,请参见CGAffineTransform 提到的CoreAnimation问题是,以最短的路线从一转到另一180度的过渡(如CoreAnimation所采取的)提供了两种可能的解决方案-一种为顺时针,另一种为逆时针。 实际上,在纵向模式下,您需要在视图的变换中添加不可见的偏差,以确保CoreAnimation在纵向和纵向倒置之间旋转时选择正确的偏置。 如果您使用的是iPhone,则在该设备上不支持UIInterfaceOrientationPortraitUpsideDown是可以接受的(大多数Apple应用程序不支持),因此实际上不支持该方向可能更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM