iPad iOS7定位问题

时间:2014-05-24 01:54:57

标签: ios objective-c ipad ios7 rotation

我有一个应用程序,当方向更改时使用以下方式更改视图:[[UIApplication sharedApplication] statusBarOrientation]。在iPhone上,它可以工作,但在iPad上,它给了我风景而不是肖像和肖像,而不是风景。

  1. 当我在 UIDeviceOrientationDidChangeNotification 之外调用 getRelevantFrame 方法时,它将返回正确的帧。
  2. 响应通知时,它将返回相反的帧(如果是横向,将返回纵向,反之亦然)。
  3. 两个版本(iPod / iPhone + iPad)都使用相同的代码,但这只会在iPad版本上打破
  4. 以下是我用来计算相关框架的代码:
    编辑:使用rob5408的建议。更改为使用UI_USER_INTERFACE_IDIOM()。

    + (CGRect)getRelevantFrame {
        //Get orientation
        UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    
       if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { //iPhone/iPod
            if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
                return [self frameiPhoneLandscape];
            }
            else {
                return [self frameiPhonePortrait];
            }
        } else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { //iPad
            if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
                NSLog(@"iPad Landscape");
                return [self frameiPadLandscape];
            }
            else {
                NSLog(@"iPad Portrait");
    
                return [self frameiPadPortrait];
            }
        }
    
        return CGRectMake(0, 0, 0, 0);
    }
    

    以下是我使用的通知:

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

    以下是我用来阅读方向更改的代码:

    - (void) didRotate:(NSNotification *)notification
    {
        NSLog(@"Parent: %@", self.parentController);
        if(self.parentController) {
            [self setFrame:[TASFrames getRelevantFrame]];
        }
    }
    

1 个答案:

答案 0 :(得分:0)

我将代码转移到了一个新项目。而现在它的工作原理应该如此。不知道为什么会这样。代码没有改变。