2012-01-07 15 views
0

У меня есть универсальное приложение, созданное в режиме раскадровки. Он настроен для автоматического поворота на текущую ориентацию. Я попытался отключить некоторые ориентации в 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 без раскадровки, и он работает нормально. Что происходит и как я могу это исправить?

ответ

3

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

Рассмотрим эту строку из кода:

return ((interfaceOrientation != UIInterfaceOrientationLandscapeRight) || (interfaceOrientation != UIInterfaceOrientationLandscapeLeft)); 
  • Если ориентация Right, то ваш код сводится к return (Right != Right) || (Right != Left), который всегда возвращает истину.

  • Если ориентация 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); 
Смежные вопросы