旋转&故事板中的定位问题

时间:2012-01-07 20:11:32

标签: objective-c rotation orientation storyboard

我在故事板模式下创建了一个通用应用程序。它被设置为自动旋转到当前方向。我试图在iPhone模式下禁用某些方向,但是当我在模拟器中测试时它不起作用。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    return ((interfaceOrientation != UIInterfaceOrientationLandscapeRight) || (interfaceOrientation != UIInterfaceOrientationLandscapeLeft));
} else {
    return YES;
}
}

此外,当iPad旋转时,它应该通过以下代码,但我得到的只是一个黑屏。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        self.view = landscape;
        self.view.transform = CGAffineTransformMakeRotation(deg2rad*(90));
        self.view.bounds = CGRectMake(0.0, 0.0, 1024.0, 748.0);
    } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
        self.view = landscape;
        self.view.transform = CGAffineTransformMakeRotation(deg2rad*(-90));
        self.view.bounds = CGRectMake(0.0, 0.0, 1024.0, 748.0);
    } else {
        self.view = portrait;
        self.view.transform = CGAffineTransformMakeRotation(0);
        self.view.bounds = CGRectMake(0.0, 0.0, 768.0, 1004.0);
    }
} else {

}
}

为什么这里出现所有这些问题?我已经尝试了不同的Xcode项目中的代码,没有故事板广告它工作正常。发生了什么,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您应该创建两个单独的stackoverflow问题。我会在这里回答你的第一个问题。

从您的代码中考虑这一行:

return ((interfaceOrientation != UIInterfaceOrientationLandscapeRight) || (interfaceOrientation != UIInterfaceOrientationLandscapeLeft));
  • 如果方向为Right,则您的代码会缩减为return (Right != Right) || (Right != Left),并始终返回true。

  • 如果方向为Left,则您的代码会缩减为return (Left != Right) || (Left != Left),并始终返回true。

  • 如果方向为Up,则您的代码会缩减为return (Up != Right) || (Up != Left),并始终返回true。

  • 如果方向为Down,则您的代码会缩减为return (Down != Right) || (Down != Left),并始终返回true。

目前尚不清楚您想要允许的方向以及要排除的方向。如果您只想允许纵向方向,请执行以下操作:

return UIInterfaceOrientationIsPortrait(interfaceOrientation);

如果您只想允许横向方向,请执行以下操作:

return UIInterfaceOrientationIsLandscape(interfaceOrientation);