1

Я пытаюсь реализовать что-то, где я застрял в какой-то момент.Ограничение ориентации интерфейса в iOS 7 и iOS 8

Я хочу, чтобы некоторые ограничения ориентации следующим образом:

  • для iPhone 4, 4S, 5, 5S, & 6 - Портрет Только

  • для iPhone 6 Plus - Оба портрета & Ландшафтный дизайн

  • Для iPad - оба Po rtrait & Пейзаж

Я попробовал все комбинации кодирования. Наконец я получил решение для IOS 8

**(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window // iOS 6 autorotation fix 
{** 


     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ 

      if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) 
      { 
       if(IS_IPHONE_4_AND_OLDER){ 

        printf("Device Type : iPhone 4,4s "); 
        return UIInterfaceOrientationMaskPortrait; 
       } 
       else if(IS_IPHONE_5){ 

        printf("Device Type : iPhone 5,5S/iPod 5 "); 
        return UIInterfaceOrientationMaskPortrait; 
       } 
       else if(IS_IPHONE_6){ 

        printf("Device Type : iPhone 6 "); 
        return UIInterfaceOrientationMaskPortrait; 
       } 
       else if(IS_IPHONE_6P){ 

        printf("Device Type : iPhone 6+ "); 
        return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait; 
       } 
      } 
      return UIInterfaceOrientationMaskPortrait; 
     } 
     else{ 

      printf("Device Type : iPad"); 
      return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait; 
     } 
} 

Используя выше коды я управляю для прошивки 8 Но он не работает в прошивке 7 или менее

Пожалуйста, помогите мне решить эту проблему ...

Thank you

ответ

1

Простой, но он работает очень хорошо. IOS 7.1 и 8

AppDelegate.h

@property() BOOL restrictRotation; 

AppDelegate.m

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { 

if(self.restrictRotation) 

    return UIInterfaceOrientationMaskPortrait; 
else 

    return UIInterfaceOrientationMaskAll; 

}

ViewController

В верхней части: Для того, чтобы обнаружить тип устройства

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 

#define IS_IPHONE_5_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f) 
#define IS_IPHONE_6_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0f) 
#define IS_IPHONE_6P_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0f) 
#define IS_IPHONE_4_AND_OLDER_IOS7 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height < 568.0f) 

#define IS_IPHONE_5_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) == 568.0f) 
#define IS_IPHONE_6_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) == 667.0f) 
#define IS_IPHONE_6P_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) == 736.0f) 
#define IS_IPHONE_4_AND_OLDER_IOS8 (IS_IPHONE && ([[UIScreen mainScreen] nativeBounds].size.height/[[UIScreen mainScreen] nativeScale]) < 568.0f) 

#define IS_IPHONE_5 (([ [ UIScreen mainScreen ] respondsToSelector: @selector(nativeBounds) ]) ? IS_IPHONE_5_IOS8 : IS_IPHONE_5_IOS7) 
#define IS_IPHONE_6 (([ [ UIScreen mainScreen ] respondsToSelector: @selector(nativeBounds) ]) ? IS_IPHONE_6_IOS8 : IS_IPHONE_6_IOS7) 
#define IS_IPHONE_6P (([ [ UIScreen mainScreen ] respondsToSelector: @selector(nativeBounds) ]) ? IS_IPHONE_6P_IOS8 : IS_IPHONE_6P_IOS7) 
#define IS_IPHONE_4_AND_OLDER (([ [ UIScreen mainScreen ] respondsToSelector: @selector(nativeBounds) ]) ? IS_IPHONE_4_AND_OLDER_IOS8 : IS_IPHONE_4_AND_OLDER_IOS7) 

Затем добавить функции Ниже:

-(void) restrictRotation:(BOOL) restriction{ 

AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; 
appDelegate.restrictRotation = restriction;} 

viewDidLoad

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ 

    if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) 
    { 
     if(IS_IPHONE_6P){ 

      printf("Device Type : iPhone 6+ "); 
      [self restrictRotation:NO]; 
     } 
     else{ 

      printf("Device Type : iPhone 6 "); 
      [self restrictRotation:YES]; 
     } 
    } 
} 
else{ 

    printf("Device Type : iPad"); 
    [self restrictRotation:NO]; 
} 
Смежные вопросы