0

我正在为 UIDeviceOrientationDidChangeNotification 注册我的视图控制器,它返回了错误的设备方向。我在 viewcontroller 的 init 函数中注册它

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleOrientationChangeNotification:) name: UIDeviceOrientationDidChangeNotification object: nil];

这是我的设备通知接收器方法。

-(void)handleOrientationChangeNotification:(NSNotification *)notification
{ 
    if(IS_IPHONE)
    {
        UIDeviceOrientation currentDeviceOrientation =  [[UIDevice currentDevice] orientation];
    .
    .
    .
}

每当设备方向改变时,我总是得到错误的方向。

4

2 回答 2

3

我在这个链接上的苹果网站上找到了解决方案

UIDeviceOrientationLandscapeRight分配给UIInterfaceOrientationLandscapeLeftUIDeviceOrientationLandscapeLeft分配给UIInterfaceOrientationLandscapeRight。原因是旋转设备需要向相反方向旋转内容。

于 2012-10-15T09:33:09.000 回答
2

这可能是因为苹果改变了管理 UIViewController 的方向的方式。在 Ios6 中 Oreintation 处理不同的是,iniOS6 shouldAutorotateToInterfaceOrientation方法已弃用。iOS 容器(例如UINavigationController)不会咨询其子级来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置UIInterfaceOrientationMaskAll为 iPad 惯用语和UIInterfaceOrientationMaskAllButUpsideDowniPhone 惯用语。

有关相同的更多信息,您应该访问 下面的此链接,我已经制作了用于处理方向更改的类别。

所以你将不得不实现另外两种方法来管理 iOS6 中 UIViewController 的方向。

在 IOS6 中引入允许方向更改

 - (BOOL)shouldAutorotate
  {

    return YES;

  }

返回设备支持的 Oreintation 数量

 - (NSUInteger)supportedInterfaceOrientations
 {
    return  UIInterfaceOrientationMaskAll;

 }

现在检查你得到的方向。

编辑:将此代码放置到作为根 ViewController 添加的 FirstViewController 中。这将帮助 UIViewController 确定它的方向。

@implementation UINavigationController (RotationIn_IOS6)

 -(BOOL)shouldAutorotate
  {
   return [[self.viewControllers lastObject] shouldAutorotate];
  }

  -(NSUInteger)supportedInterfaceOrientations
 {
   return [[self.viewControllers lastObject] supportedInterfaceOrientations];
 }

 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
 {
   return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
 }

 @end

我希望我会对你有所帮助。

于 2012-10-15T07:49:02.500 回答