2014-10-16 3 views
1

Я использую код, который показывает определенный файл xib в зависимости от устройства, на данный момент 3 xibs, один для iPhone4, один для iPhone5 и один для iPad.Определение большего, чем для размера экрана iPhone 6?

С iOS8/iPhone 6 приложение не работает ни на чем выше 5s из-за того, что xib не знает, что загрузить;

- (IBAction)btnTapForStart:(id)sender { 

    fromOtherClass=YES; 

    if([[UIScreen mainScreen]bounds].size.height == 568) 
    { 
     PlayMusicViewController *pmvc = [[PlayMusicViewController alloc]initWithNibName:@"XibForIPhone5" bundle:[NSBundle mainBundle]]; 

     [self.navigationController pushViewController:pmvc animated:YES]; 

    } 
    else 
    { 
     PlayMusicViewController *pmvc = [[PlayMusicViewController alloc]init]; 

     [self.navigationController pushViewController:pmvc animated:YES]; 
    } 

    [appObject.audioPlayer stop]; 
} 

Если изменить значение 568 для выше он будет работать, но есть способ объединить это, например, высота 568 OR размер iPhone6 ​​ИЛИ iPhone 6 плюс размер и т.д.?

+0

Почему у вас есть несколько xibs? Просто используйте один для всех устройств (возможно, для iPad 2). Используйте автоматическую компоновку и ограничения, чтобы получить все размеры и расположение должным образом. – rmaddy

+1

Я не писал код изначально и просто хочу исправить его, поэтому он работает для тех, у кого есть приложение, и использует iPhone 6/6 Plus, после чего я могу беспокоиться о том, чтобы уточнить код, но это более срочное решение. .. Благодаря тому, кто помечает этот ответ, также ... – user3355723

+0

Каков ваш вопрос? Вы хотите использовать iPhone 5 xib для iPhone 6 или у вас есть другой xib, специфичный для iPhone 6? – rmaddy

ответ

1

Возможно, вы должны использовать автоматическую компоновку, как говорит Мэдди, но если вы хотите иметь код, который работает для определенных устройств, тогда вам может понадобиться реализовать этот метод утилиты. Затем вы можете создать столько xibs, сколько хотите, и настроить их на определенные устройства. например

if ([[Utilities deviceType] isEqualToString:@"iPhone Retina4"] || [[Utilities deviceType] isEqualToString:@"iPhone Retina35"]) { 
    -- do something specific for these phones 
} 

Я поместил этот метод в класс Утилиты.

+ (NSString *)deviceType { 
    NSString *device = nil; 
    CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
    CGFloat deviceScale = [UIScreen mainScreen].scale; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
     device = @"iPhone Classic"; // Just in case it doesn't make it through the conditionals 
     // Classic has a resolution of 480 × 320 
     if((screenSize.height == 480 || screenSize.width == 480) && deviceScale == 1.0f) { 
      device = @"iPhone Classic"; 
     // Retina has a resolution of 960 × 640 
     } else if((screenSize.height == 480 || screenSize.width == 480) && deviceScale == 2.0f) { 
      device = @"iPhone Retina35"; 
     // Retina 4" has a resolution of 1136 x 640 
     } else if (screenSize.height == 568 || screenSize.width == 568) { 
      device = @"iPhone Retina4"; 
     // iPhone 6 has a resolution of 1334 by 750 
     } else if (screenSize.height == 667 || screenSize.width == 667) { 
      device = @"iPhone 6"; 
     // iPhone 6 Plus has an actual size of 2208 × 1242 and resolution of 1920 by 1080 
     // Reported size is 736 x 414 
     } else if (screenSize.height == 736 || screenSize.width == 736) { 
      device = @"iPhone 6 Plus"; 
     } 

    } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     device = @"iPad Classic"; // Just in case it doesn't make it through the conditionals 
     if(deviceScale == 1.0f) { 
      device = @"iPad Classic"; 
     } else if (deviceScale == 2.0f) { 
      device = @"iPad Retina"; 
     } 
    } 
    //NSLog(@"The device is %@ scale is %f and the height is %f and width is %f", device, deviceScale, screenSize.height, screenSize.width); 

    return device; 
} 
+0

Зачем вам использовать строки здесь? Перечислите. – StilesCrisis

+0

@StilesCrisis, у меня нет формального обучения языку, поэтому в моей базе знаний есть большие дыры. Мои знания перечислений и способы их использования минимальны. – JScarry

0

Я провел некоторое исследование по перечислениям, и они хороши. Они делают код более читабельным, но в основном они позволяют компилятору помочь вам вводить и ловить ошибки. Xcode автоматически заполнит ваш тип устройства и предоставит вам ошибку: Использование необъявленного идентификатора, если вы попытаетесь использовать значение, которое не определено. Вот код, переписанный как перечисление. Я префикс значений с помощью LF, но вы должны использовать все, что подходит для вашего проекта.

Это в моем файле заголовка

// Devices as of Fall 2014 
typedef NS_ENUM(NSInteger, LFdeviceType) { 
    LFDeviceTypePhoneClassic, 
    LFDeviceTypePhoneRetina3_5, 
    LFDeviceTypePhoneRetina4, 
    LFDeviceTypePhone6, 
    LFDeviceTypePhone6Plus, 
    LFDeviceTypePadClassic, 
    LFDeviceTypePadRetina, 
}; 

И это в моем файле .m.

m+ (NSInteger)deviceType { 
    CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
    CGFloat deviceScale = [UIScreen mainScreen].scale; 
    LFdeviceType device = LFDeviceTypePhoneClassic; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
     device = LFDeviceTypePhoneClassic; // Just in case it doesn't make it through the conditionals 
     // Classic has a resolution of 480 × 320 
     if((screenSize.height == 480 || screenSize.width == 480) && deviceScale == 1.0f) { 
      device = LFDeviceTypePhoneClassic; 
     // Retina has a resolution of 960 × 640 
     } else if((screenSize.height == 480 || screenSize.width == 480) && deviceScale == 2.0f) { 
      device = LFDeviceTypePhoneRetina3_5; 
     // Retina 4" has a resolution of 1136 x 640 
     } else if (screenSize.height == 568 || screenSize.width == 568) { 
      device = LFDeviceTypePhoneRetina4; 
     // iPhone 6 has a resolution of 1334 by 750 
     } else if (screenSize.height == 667 || screenSize.width == 667) { 
      device = LFDeviceTypePhone6; 
     // iPhone 6 Plus has an actual size of 2208 × 1242 and resolution of 1920 by 1080 
     // Reported size is 736 x 414 
     } else if (screenSize.height == 736 || screenSize.width == 736) { 
      device = LFDeviceTypePhone6Plus; 
     } 

    } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     device = LFDeviceTypePadClassic; // Just in case it doesn't make it through the conditionals 
     if(deviceScale == 1.0f) { 
      device = LFDeviceTypePadClassic; 
     } else if (deviceScale == 2.0f) { 
      device = LFDeviceTypePadRetina; 
     } 
    } 
    //NSLog(@"The device is %@ scale is %f and the height is %f and width is %f", device, deviceScale, screenSize.height, screenSize.width); 

    return device; 
} 

Зов это следующим образом:

if (( [Utilities deviceType] == LFDeviceTypePhoneClassic 
     || [Utilities deviceType] == LFDeviceTypePhoneRetina3_5) && 
     numberOfFoilsOnScreen > 7) { 
     numberOfFoilsOnScreen = 7; 
}