Ориентация интерфейса в iOS 6.0
Как использовать следующие методы для поддержки ориентации интерфейса в iOS 6.0:
shouldAutorotate
supportedInterfaceOrientations
preferredInterfaceOrientationForPresentation
Как "shouldAutorotateToInterfaceOrientation" устарел в iOS 6.0.
Просьба предоставить фрагменты кода для поддержки ваших ответов.
Спасибо.
Ответы
Ответ 1
Устаревший метод в iOS 5:
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
Замена в iOS 6 и эквивалент этого устаревшего метода iOS 5 выше:
- (BOOL) shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeRight;
}
Надеюсь, что это поможет.
[edit # 1: Добавлен мой UIViewController, который успешно запускается в портретном режиме в XCode 4.5 на iPhone 6.0 Simulator]
#import "FirstViewController.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationMaskPortrait;
}
[# edit 2: Пример кода из только ландшафтного приложения, которое поддерживает iOS 5 и iOS 6]
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
Ответ 2
Кстати, ваши настройки в настройках проекта Xcode теперь имеют приоритет.
Убедитесь, что вы правильно настроили массив "Поддерживаемые интерфейсы" в настройках вашего проекта.
Это была проблема для меня. Удалены нежелательные, и мое приложение работало так же, как и при компиляции с Xcode 4.4.1
Ответ 3
У моего приложения есть экземпляр пользовательского подкласса UINavigationController, в котором представлены несколько контроллеров представлений, все только в портрете, кроме случаев, когда воспроизводится видео, и в этом случае я хочу дополнительно разрешить обе ориентации ландшафта.
Основываясь на ответе @uerceg, это мой код.
Сначала я включил Portrait, Landscape Left и Landscape справа в Xcode → Target → Summary.
В реализации подкласса UINavigationController я #import
'ed <MediaPlayer/MediaPlayer.h>
.
Затем я применил эти методы:
// Autorotation (iOS <= 5.x)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) {
// Playing Video: Anything but 'Portrait (Upside down)' is OK
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
else{
// NOT Playing Video: Only 'Portrait' is OK
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
}
// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) {
// Playing Video, additionally allow both landscape orientations:
orientations |= UIInterfaceOrientationMaskLandscapeLeft;
orientations |= UIInterfaceOrientationMaskLandscapeRight;
}
return orientations;
}
Ответ 4
Код Николаса Мириа работал у меня. Немного по-другому, у меня был UITabBarController, который представил UINavigationControllers, и я использовал StoryBoards. Реализация подкласса UITabBarController точно такая же и терпеливы с выбором класса для контроллера панели вкладок в Story Boards. Он не сразу доступен даже после строительства.
Ответ 5
https://devforums.apple.com/thread/165384?tstart=0
https://devforums.apple.com/thread/166544?tstart=0
В приведенных выше разделах содержится ряд примеров и предложений, связанных с поддержкой изменений ориентации интерфейса на iOS6, причем два потока связаны с проблемами с просмотром игрового центра, но их должно быть достаточно, чтобы вы начали.
Вы также должны проверить заметки о выпуске iOS6 в UIKit, к сожалению, я не могу дать вам прямую ссылку, так как я новичок.
Избегайте отправки кода регистрации из-за NDA
Надеюсь, что поможет