Xcode 4.5 iOS 6.0模拟器方向无法正常工作

时间:2012-09-24 13:07:44

标签: ios-simulator orientation xcode4.5

我已将我的Xcode更新为4.5,我已实现了以下的方向方法

  -(BOOL)shouldAutorotate{

    return YES;

  }

-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskAll;
}

我在willRotateToInterfaceOrientation方法中设置按钮,标签,图像的帧大小

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{


  if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait )||
        ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown ))
  {

    // set frame sizes for portait

   }

  else if(( [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft )||
            ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight ))

  {

    // set frame sizes for landscape

   }

}

但有时在旋转模拟器时没有调用此方法 有时模拟器在从另一个viewController导航时没有检测到方向。我检查了info.plist文件 - 没关系。

2 个答案:

答案 0 :(得分:4)

Apple不会在IOS 6.0中调用shouldAutorotatetoInterfaceOrientation调用,除非您告诉主窗口哪个视图控制器将其发送到。

我通过将window.rootViewController设置为我的应用程序的顶级视图控制器来在我的应用程序中工作

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   ...
   window.rootViewController = topLevelViewController;
   ...
}

我的应用程序的iPhone版本仅支持两个纵向方向,因此我的顶级iPhone视图控制器需要一种新方法:

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

这是关于Buzz Touch的讨论。

答案 1 :(得分:0)

Apple已经弃用了ios6的shouldautorate方法,而是使用这些方法

- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);
- (NSUInteger)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);
// Returns interface orientation masks.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0);