Ориентация устройства - изменение законным способом (iOS 4.0+) - PullRequest
2 голосов
/ 02 сентября 2011

Мое приложение имеет панель навигации, где 1-й экран возвращает ДА ​​в ориентацию, второй - какую-то ориентацию в зависимости от того, что пользователь выбрал в 1-м экране. После возврата к 1-му экрану со 2-го экрана, если пользователь имел устройство в руке в портретной ориентации, но интерфейс находился в альбомной ориентации, 1-й экран устанавливается в альбомную ориентацию. Это происходит из-за

(BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation 

Вызывается только после изменения ориентации устройства.

Я хочу проверить ориентацию устройства и установить ориентацию интерфейса на этот. Пробовал:

//1st method:
UIViewController *rotateTheScreen = [[UIViewController alloc]init];
[self presentModalViewController:rotateTheScreen animated:NO];
[self dismissModalViewControllerAnimated:NO];
[rotateTheScreen release];

//2nd method:
UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;

//3rd method:
UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

1-й действует странно, вращает все случаи, кроме возврата из ориентации интерфейса = альбомная ориентация и ориентация устройства = альбомная (здесь ошибка, он поворачивается в альбомную) 2-й проверяет интерфейс, как следует из названия, и не работает для моей проблемы Третье, насколько я слышал, является частным, и Apple отклоняет приложения, использующие это.

Ответы [ 3 ]

2 голосов
/ 02 сентября 2011

Взгляните на эту тему . По сути, нет способа принудительно настроить ориентацию устройства и , чтобы Apple одобрила ваше приложение.

Вскоре метод существует, но это недокументированный метод класса UIDevice.

[[UIDevice currentDevice] setOrientation: UIInterfaceOrientationLandscapeRight animated:YES];

Это дает предупреждение компилятору, что вы можете избавиться с категорией.

@interface UIDevice (MyAwesomeMethodsThatAppleWillNeverAllowMeToUse)
    -(void)setOrientation:(UIInterfaceOrientation)orientation animated:(BOOL)animated;
    -(void)setOrientation:(UIInterfaceOrientation)orientation;
@end

Кроме того, некоторые говорят, что вы можете вызывать эти методы косвенно, используя performSelector, чтобы обойти статический анализ кода Apple, как вы можете прочитать в комментариях здесь .

1 голос
/ 02 сентября 2011

как я знаю нет законного пути.Если я ошибаюсь, поправьте меня, пожалуйста!

0 голосов
/ 02 сентября 2011

изменить «Первоначальную ориентацию интерфейса» в файле plist вашего проекта

...