12

谁能确认要同时支持 iOS 6 和 iOS 5,添加新的 iOS 6 自动旋转方法是没有意义的,因为 Apple 文档建议如果您还实现 iOS 5 方法,这些方法将被完全忽略?

特别是,我谈论的方法- (NSUInteger)supportedInterfaceOrientations- (BOOL) shouldAutorotate- 如果您还实现了这些方法,编译器会忽略和合成这些方法- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

4

6 回答 6

8

如果您将应用程序打包到新的 sdk 中,则需要为自动旋转添加新的回调。但是,只有在 iOS 6 设备上运行此类应用程序时才会收到这些回调。对于在早期 iOS 版本上运行的设备,将收到较早的回调。如果您不实现新的回调,则默认行为是您的应用程序在 iPad 上的所有方向上运行,在 iPhone 上除了 UpsideDown 方向之外的所有方向上运行。

于 2012-09-17T09:38:11.970 回答
8

对于 iOS5 旋转。检查您想要的方向并返回 YES

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{  
    if ((interfaceOrientation==UIInterfaceOrientationPortrait)||(interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown)) {
        return YES;
    }
    else return NO;
}

iOS 6.0 自动旋转支持

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationIsPortrait(UIInterfaceOrientationMaskPortrait|| UIInterfaceOrientationMaskPortraitUpsideDown);

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationIsPortrait(UIInterfaceOrientationPortrait|| UIInterfaceOrientationPortraitUpsideDown);

}
于 2012-12-10T12:25:10.357 回答
2

我认为最优雅的解决方案是:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return ((1 << toInterfaceOrientation) & self.supportedInterfaceOrientations) != 0;
}

我错过了什么吗?

于 2012-12-03T13:44:08.893 回答
1
 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskAll;
}

-(void)viewWillLayoutSubviews
{
if([self interfaceOrientation] == UIInterfaceOrientationPortrait||[self interfaceOrientation] ==UIInterfaceOrientationPortraitUpsideDown)
    {
       if (screenBounds.size.height == 568)
        {
          //set the frames for 4"(IOS6) screen here
         }
        else

        {
         ////set the frames for 3.5"(IOS5/IOS6) screen here
        }

}
        else if ([self interfaceOrientation] == UIInterfaceOrientationLandscapeLeft||[self interfaceOrientation] == UIInterfaceOrientationLandscapeRight)
        {
         if (screenBounds.size.height == 568)
        {
          //set the frames for 4"(IOS6) screen here
         }
        else

        {
         ////set the frames for 3.5"(IOS5/IOS6) screen here
        }


    }
//it is for IOS5
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
     return YES;
    }

-(void)viewWillLayoutSubviews 此方法将调用 ios5/ios6。此代码对带有 3.5" 屏幕的 ios6/ios5/ios6 和带有 ios6 的 4" 屏幕都很有用。

于 2012-11-22T06:44:32.323 回答
0

您必须在某处设置一个标志(我相信您的 Info.plist),指示您使用两者中的哪一个。如果你使用新的,你不能为 iOS 5 构建(或者至少,它不能在 iOS 5 上工作)。如果您使用旧方法,则不会调用新方法。所以是的,您几乎必须选择要使用的方法,如果您想支持 iOS 5,则不能使用新方法。

于 2012-09-15T06:13:48.510 回答
0

为了在 ios5 和 ios6 中支持自动旋转,我们需要在 ios6 的情况下提供回调......

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(orientationChanged:) 
    name:UIDeviceOrientationDidChangeNotification object:nil];

我们需要打电话

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;

} 

-(BOOL)shouldAutoRotate{
    return YES;
  }

适用于 iOS5

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return ((toInterfaceOrientation == UIInterfaceOrientationPortrait) || (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown));
}
于 2013-08-22T07:24:48.647 回答