58 votes

Détection de tailles d'écran iPhone 6/6 + en points

Compte tenu de la nouvelle annonce iPhone 6 tailles d'écran:

iPhone 6: 1334h * 750w @2x (in points: 667h * 375w)
iPhone 6+: 1920 * 1080 @3x (in points: 640h * 360w)

Je me demandais si il existe un code qui me permet de détecter la taille de l'écran de l'appareil de l'utilisateur est, de sorte que j'ai pu régler et la taille de l' UIImages et d'autres matériaux en conséquence avec l'appareil de l'utilisateur.

Jusqu'à présent, j'ai été en utilisant les éléments suivants:

- (NSString *) platform{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithUTF8String:machine];
    free(machine);
    return platform;
}

- (NSString *) platformString{
    NSString *platform = [self platform];
    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";
    if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,3"])    return @"Verizon iPhone 4";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
    if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";
    if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";
    if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
    if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
    if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
    if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
    if ([platform isEqualToString:@"iPod5,1"])      return @"iPod Touch 5G";
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";
    if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";
    if ([platform isEqualToString:@"iPad4,4"])      return @"iPad mini 2G (WiFi)";
    if ([platform isEqualToString:@"iPad4,5"])      return @"iPad mini 2G (Cellular)";
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
}

En tant que tel, devrais-je assumer iPhone7,1 et iPhone7,2 l'iPhone 6 iPhone7,3 et iPhone7.4 sont les avantages? Si quelqu'un a de façon plus concrète à dire c'est super, merci.!

101voto

Hannes Sverrisson Points 6592

Le premier écran de l'écran de l'appareil, Notez que la mise en images pour les nouveaux téléphones doivent être ajoutés avant, sinon le simulateur est en cours d'exécution en mode de mise à l'échelle pour des Applications plus anciennes : Voici le code que j'ai utilisé pour vérifier cela:

UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
          NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

Code pour la détection de l'iPhone 6 Plus:

-(BOOL)iPhone6PlusDevice{
    if ([UIScreen mainScreen].scale > 2.9) return YES;   // Scale is only 3 when not in scaled mode for iPhone 6 Plus
    return NO;
}

ou

-(BOOL) iPhone6PlusUnZoomed{
    if ([self iPhone6PlusDevice]){
        if ([UIScreen mainScreen].bounds.size.height > 720.0) return YES;  // Height is 736, but 667 when zoomed.
    }
    return NO;
}

Remarque: Si vous êtes à la vérification pour l'iPhone 6 Plus, pour ajuster l'interface utilisateur, alors ne vous fiez pas sur .nativeScale, parce que le simulateur et le réel de l'appareil donne des résultats différents. En raison du commentaire ci-dessous. L'échelle est un CGFloat et donc le code ne doit pas vérifier l'égalité: .échelle == 3.0, car les valeurs flottantes ne peut jamais être égal à cause de la conversion en nombres binaires.


Après l'ajout de démarrage des images pour le nouveau iPhone6 et 6Plus, les changements de taille. Elles échelle Applications plus anciennes pour s'adapter à l'écran.

La taille de l'iPhone 6 Plus avec @3x mise à l'échelle (Apple nom: Retina HD de 5,5), espace de Coordonnées: 414 x 736 points et 1242 x 2208 pixels, 401 ppi d'écran, la taille physique est de 2,7 x 4,8 ou 68 x 122 mm:

Screen bounds: {{0, 0}, {414, 736}}, Screen resolution: <UIScreen: 0x7f97fad330b0; bounds = {{0, 0}, {414, 736}}; 
mode = <UIScreenMode: 0x7f97fae1ce00; size = 1242.000000 x 2208.000000>>, scale: 3.000000, nativeScale: 3.000000

La taille de l'iPhone 6 avec @2x mise à l'échelle (Apple nom: Retina HD de 4,7), espace de Coordonnées: 375 x 667 points et 750 x 1334 pixels, 326 ppi d'écran, la taille physique est de 2,3 x 4.1 ou 58 x 104 mm:

Screen bounds: {{0, 0}, {375, 667}}, Screen resolution: <UIScreen: 0x7fa01b5182d0; bounds = {{0, 0}, {375, 667}}; 
mode = <UIScreenMode: 0x7fa01b711760; size = 750.000000 x 1334.000000>>, scale: 2.000000, nativeScale: 2.000000

Et l'iPhone 5 pour la comparaison est de 640 x 1136, iPhone 4 640 x 960.

Remarque: Télécharger LaunchImages sinon, l'Application va s'exécuter à l'échelle et ne pas montrer de dimensionnement correcte, ou les tailles d'écran.

Comparing iPhone 6 and 6 Plus

30voto

bkhayll Points 127

Si vous préférez les macros, voici celles que vous pouvez utiliser pour différencier les modèles d’iPhone. Celles-ci sont basées sur les valeurs en points.

 #define IS_IPHONE_4 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)480) < DBL_EPSILON)
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
#define IS_IPHONE_6 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON)
#define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON)
 

17voto

Roland Keesom Points 2596

J'utilise le code suivant pour déterminer quel périphérique est en cours d'exécution (c'est un peu rapide et sale, mais ça fait l'affaire)

 if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ){

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
    if( screenHeight < screenWidth ){
        screenHeight = screenWidth;
    }

    if( screenHeight > 480 && screenHeight < 667 ){
        NSLog(@"iPhone 5/5s");
    } else if ( screenHeight > 480 && screenHeight < 736 ){
        NSLog(@"iPhone 6");
    } else if ( screenHeight > 480 ){
        NSLog(@"iPhone 6 Plus");
    } else {
        NSLog(@"iPhone 4/4s");
    }
}
 

(Cela ne fonctionne que lorsque l'iPhone 6/6 Plus est activé en ajoutant les écrans de démarrage appropriés)

4voto

user3344236 Points 417

Vérifiez la liste mise à jour sur le wiki , là j'ai 7,2 pour iPhone 6 et 7,1 pour iPhone 6 plus.

4voto

sweepy_ Points 123

Vous pouvez détecter l'iPhone 6 Plus en fonction de son échelle native à l'aide de cette macro:

 #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X