2

Я строю приложение для iPhone, который будет иметь только 1 вид ландшафта, и поэтому я хочу, чтобы блокировать пейзаж для всех других, я попытался это:IOS7/IOS8 Разрешить только портрет зрения контроллера

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

Но он по-прежнему вращается

+0

Почему бы не просто настроить приложение только для портретного режима, а затем, когда вам нужен ландшафтный режим, просто разрешите режим ландшафта? – NorthBlast

+0

@NorthBlast Я не думаю, что вы можете это сделать. Если вы включите только портрет в проекте, вы вообще не получите уведомление об изменениях ориентации. – Fogmeister

+0

Я сделал это несколько раз .. :) и мой проект установлен в портретный режим .. известный как принудительный ландшафтный режим;) – NorthBlast

ответ

9

Я предлагаю просто сделать ваше приложение для портретного режима, а затем всякий раз, когда вам нужен ландшафтный режим, тогда разрешите ландшафтный режим.

Во-первых, как ранее предлагалось щелкнуть по -> Название проекта -> Общие -> Информация о развертывании -> Выберите только портрет для ориентации устройства.

Во-вторых, в вашем AppDelegate.h добавить это свойство ..

@property (nonatomic) BOOL fullScreenVideoIsPlaying; 

Затем на вашем AppDelegate.m я добавлю эту функцию ..

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    if (self.fullScreenVideoIsPlaying == YES) { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
    else { 
     return UIInterfaceOrientationMaskPortrait; 
    } 
} 

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

((AppDelegate *)[[UIApplication sharedApplication] delegate]).fullScreenVideoIsPlaying = YES; 
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO]; 

Тогда для установки обратно в портретном режиме вы это сделать ..

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    appDelegate.fullScreenVideoIsPlaying = NO; 

[self supportedInterfaceOrientations]; 

[self shouldAutorotate:UIInterfaceOrientationPortrait]; 

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO]; 

Вам может понадобиться эти функции для прошивки 8 ..

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

- (BOOL)shouldAutorotate:(UIInterfaceOrientation)interfaceOrientation{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

-(NSUInteger)supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

Я надеюсь, что это помогает .. :)

+0

Что делать, если [self presentMoviePlayerViewControllerAnimated: self.player]; ? –

-3

Нажмите проект и выберите Настройки ориентации оттуда.

+0

А как насчет пейзажа, который мне нужен? – rob180

+0

Собственно, он дает ответ. Этот ответ может быть неправильным, но это ответ. – picciano

Смежные вопросы