Проблемы с вращением и ориентацией в раскадровке - PullRequest
0 голосов
/ 08 января 2012

У меня есть универсальное приложение, созданное в режиме раскадровки.Он настроен на автоматический поворот в текущую ориентацию.Я попытался отключить некоторые ориентации в режиме iPhone, но он не работает, когда я тестирую в симуляторе.

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

Кроме того, когда iPad поворачивается, он должен пройти следующий код, НО все яget - это черный экран.

- (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 Ответ

3 голосов
/ 08 января 2012

Вы должны создать два отдельных вопроса о стеке потока.Я отвечу на ваш первый вопрос здесь.

Рассмотрим эту строку из вашего кода:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...