установить UIInterfaceOrientation во время выполнения

У меня есть 5 просмотров в раскадровке. Я хочу, чтобы каждая ориентация вида была разной, например, один вид будет UIInterfaceOrientationLandscapeRight, другой вид будет UIInterfaceOrientationLandscapeLeft или UIInterfaceOrientationPortrait или UIInterfaceOrientationPortraitUpsideDown. Так как же установить эту ориентацию взгляда по-другому.

Я использовал [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];, но он показывает предупреждение «UIDevice может не отвечать на setOrientation». По мнению многих авторов stackoverflow, которые я использую

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    //return UIInterfaceOrientationLandscapeLeft;
    return (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
}

этот код выше, но он не работает в моем проекте. Итак, какова правильная процедура ориентации экрана. Заранее спасибо.


person Banshidhari    schedule 21.05.2012    source источник


Ответы (3)


Попробуй это

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];

Вы не можете установить UIDeviceOrientation, потому что это физический параметр. Если вы держите устройство в руке в портретной ориентации - как вы программно настраиваете его в альбомную?). UIDeviceOrientation означает ориентацию устройства, а не интерфейс. Этот ответ описывает различия между ориентациями: https://stackoverflow.com/a/3897243/194544

person beryllium    schedule 22.05.2012
comment
Так есть ли способ сохранить мое устройство в портретном режиме программно? - person Banshidhari; 23.05.2012
comment
Чтобы сохранить возврат от shouldAutorotateToInterfaceOrientation YES для портретной ориентации. - person beryllium; 23.05.2012

Вы должны поместить -(BOOL)shouldAutorotateToInterfaceOrientation: в каждый viewController и проверить правильную ориентацию. Если вы нажмете viewController, который поддерживает только, например. upsideDown, он будет представлен в перевернутом виде.

Примечание:

  • Если вы находитесь в среде с вкладками, поведение будет другим. Пожалуйста, спросите, если это так.
  • Если вы говорите о rootViewController, ваше приложение должно быть настроено в соответствии с первым viewController (Info.plist)
person calimarkus    schedule 22.05.2012

Свойство ориентация в UIDevice доступно только для чтения.

Вы можете использовать [UIViewController attemptRotationToDeviceOrientation];, чтобы попытаться повернуть все контроллеры представления в текущую ориентацию устройства. Вы не можете принудительно установить поворот.

person David Rönnqvist    schedule 22.05.2012