Исправлена ​​ориентация для Iphone в универсальном приложении

Я разработал универсальное приложение, которое я хочу, чтобы поддерживать все ориентации для IPAD, но для Iphone я просто хочу UIInterfaceOrientationPortrait и UIInterfaceOrientationPortraitUpsideDown только для этого у меня есть

-(BOOL)shouldAutorotate {
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
        return NO;
    }else{
        return YES;
    }
}
- (NSUInteger)supportedInterfaceOrientations{

     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
         return UIInterfaceOrientationMaskPortrait;
     }else{
        return UIInterfaceOrientationMaskAll;
     }

} 
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){

    return interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ;
     }else{
         return YES;
     }

}

Но все же это не остановит ориентацию в ландшафте

2 ответа

Решение

Просто отключите все другие ориентации, кроме UIInterfaceOrientationPortrait а также UIInterfaceOrientationPortraitUpsideDown один для iPhone из резюме, как в описании ниже. На картинке "Перевернутый" отключен, пожалуйста, включите его. Благодарю.

Для переворачивания портрета используйте навигационный контроллер

1) Я создал новый подкласс UINavigationController и добавил методы shouldAutorotate и compatibilityInterfaceOrientation:

     // MyNavigationController.h:
     #import <UIKit/UIKit.h>

     @interface MyNavigationController : UINavigationController

     @end

    // MyNavigationController.m:
     #import "MyNavigationController.h"
     @implementation MyNavigationController
     ...
    - (BOOL)shouldAutorotate {
    return YES;
     }

     - (NSUInteger)supportedInterfaceOrientations {
     return UIInterfaceOrientationMaskAll;
     }
    ...
       @end

2) В AppDelegate я использовал свой новый подкласс для отображения моего корневого ViewController (это introScreenViewController, подкласс UIViewController) и установил self.window.rootViewController, поэтому выглядит так:

      nvc = [[MyNavigationController alloc]              initWithRootViewController:introScreenViewController];
     nvc.navigationBarHidden = YES;
      self.window.rootViewController = nvc;
      [window addSubview:nvc.view];
   [window makeKeyAndVisible];
Другие вопросы по тегам