1

我在另一个帖子中看到了这一点。我知道我需要覆盖 iOS5 的第一个方法和 iOS6 的以下两个方法。

iOS 5:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

iOS 6

- (BOOL) shouldAutorotate
{
      return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
      return UIInterfaceOrientationMaskLandscapeRight;
}

但是,我确实对如何正确使用它们有一些疑问。

  1. 假设我在 XCode 项目的设置中设置了supportedOrientations,我是否必须实现 shouldAutoRotate 和 SupportedInterfaceOrientations?如果我不这样做会怎样?
  2. 如果我不覆盖 shouldAutoRotate,默认值是 YES 吗?
  3. 如果我在 shouldAutorotateToInterface 中返回 NO,我会收到警告“shouldAutorotateToInterfaceOrientation:适用于所有界面方向。它应该至少支持一个方向。” 这很糟糕吗?它对我的应用程序有影响吗?
  4. 什么时候出现崩溃“支持的方向与应用程序没有共同的方向,并且 shouldAutorotate 返回 YES;”
  5. 如果我在 shouldAutorotate 中返回 NO 并且我有多个 supprotedInterfaceOrientations 会发生什么?是否与仅使用肖像相同,因为我的 VC 不会旋转?
  6. 如果我在 shouldAutorotate 中返回 YES,我的 Xcode 设置中有多个受支持的方向,但我覆盖了 supportInterfaceOrientations 并只返回 1,该怎么办?
4

1 回答 1

2

我正在通过记忆做这些答案中的绝大多数,所以可能会有一些错误......

  1. 您输入的那些值将用于您的所有视图控制器。如果您想在一个视图控制器中指定不同的行为,则必须覆盖它们。
  2. 是的。在一个新项目中对其进行了测试:

    // Should autorotate not implemented
    -(void)viewDidLoad {
         [super viewDidLoad];
         NSLog(@"%@", [self shouldAutorotate]?@"y":@"n");
    }
    
  3. 您收到警告是因为您说不应该自动旋转,而是为他提供多个支持的界面方向shouldAutorotateToInterfaceOrientation:。要么支持方向并给出可能的方向,要么不支持。
  4. 例如,如果您告诉您的应用程序(在 .xcodeproj 中)仅支持纵向向上,并且您在视图控制器中指定您支持的界面方向不包括纵向向上。
  5. 您是在告诉系统不要自动旋转。然后,您应该手动进行轮换。状态栏可能会旋转,但您的界面不会。
  6. 该屏幕将始终处于该界面方向,不会旋转。您在 xcodeproj 中指定的接口是应用程序可以支持的接口。然后,您可以拥有仅支持其中一种或多种方向的特定视图控制器。

也就是说,通常很难获得确切的期望行为。所以通常的方法是“试错”。或者正如我的一位老师总是说“错误和试验”,因为你已经用这种方法犯了错误=)

于 2013-05-20T09:26:24.577 回答