270 votes

IPhone 6 Plus confusion de résolution : Xcode ou le site web d'Apple ? pour le développement

Le site Web d'Apple affirme que la résolution est de 1080p : 1920 x 1080

Cependant, l'écran de lancement requis par Xcode (8.0 GM lancé aujourd'hui) est de 2208 x 1242.

Qui a raison?

Xcode

0 votes

Les images de lancement pour l'iPhone 6+ doivent être de 1242x2208 et 2208x1242. Au moins cela assure que les applications fonctionnent correctement dans le simulateur (et cela est documenté dans les normes de conception). Je n'ai pas encore compris pourquoi cela diffère de la taille d'écran physique supposée de 1920x1080.

2 votes

Une très étrange divergence.

14 votes

310voto

Tommy Points 56749

L'iPhone 6+ rend en interne en utilisant des ressources @3x à une résolution virtuelle de 2208×1242 (avec 736x414 points), puis échantillonne cela pour l'affichage. La même chose que d'utiliser une résolution mise à l'échelle sur un MacBook Retina - cela leur permet d'atteindre un multiple entier pour les ressources pixel tout en ayant par exemple un texte de 12 pt qui semble de la même taille à l'écran.

Donc, oui, les écrans de lancement doivent être de cette taille.

Les mathématiques :

Le 6, le 5s, le 5, le 4s et le 4 sont tous à 326 pixels par pouce, et utilisent des ressources @2x pour rester aux environs de 160 points par pouce de tous les appareils précédents.

Le 6+ est à 401 pixels par pouce. Donc il aurait hypothétiquement besoin de ressources @2,46x environ. Au lieu de cela, Apple utilise des ressources @3x et redimensionne la sortie complète à environ 84% de sa taille naturelle.

En pratique, Apple a décidé d'opter pour quelque chose plus proche de 87%, transformant le 1080 en 1242. Sans aucun doute, cela était fait pour trouver quelque chose aussi proche que possible de 84 % tout en produisant des tailles entières dans les deux directions - 1242/1080 = 2208/1920 exactement, alors que si vous aviez transformé le 1080 en, disons, 1286, vous auriez dû somehow rendre 2286,22 pixels verticalement pour bien s'échelonner.

6 votes

Comment l'as-tu calculé-> "résolution virtuelle de 2208×1242 (avec 736x414 points)" et cela "nécessite environ @2.46x ressources" Que renverra UIScreen mainScreen].bounds.size.height pour un iPhone 6+ ? 568, 568*3 (1704) ou 1920.

1 votes

Peut-être ajouter une note à cette réponse à propos des images de lancement ? (voir la réponse de Hannes) Utile à garder à l'esprit pour les applications existantes en cours de mise à jour (sinon, elles s'exécutent à 320x576 @3x - j'étais confus pendant un moment !)

2 votes

@msk [UIScreen mainScreen].bounds.size.height retourne 736 dans le simulateur iPhone 6+ lorsque en mode portrait. C'est la valeur 2208 divisée par l'échelle de 3. La largeur est de 414.

116voto

Hannes Sverrisson Points 6592

La réponse est que les anciennes applications s'exécutent en mode Zoom 2208 x 1242. Mais lorsque une application est construite pour les nouveaux téléphones, les résolutions disponibles sont: Super Retina HD 5.8 (iPhone X) 1125 x 2436 (458ppi), Retina HD 5.5 (iPhone 6, 7, 8 Plus) 1242 x 2208 et Retina HD 4.7 (iPhone 6) 750 x 1334. Cela provoque la confusion mentionnée dans la question. Pour construire des applications qui utilisent la taille d'écran complète des nouveaux téléphones, ajoutez des LaunchImages dans les tailles suivantes: 1125 x 2436, 1242 x 2208, 2208 x 1242 et 750 x 1334.


Actualisé pour les nouveaux iPhones 12, 12 mini, 12 Pro, 12 Pro Max

Taille pour iPhone 12 Pro Max avec échelle @3x, espace de coordonnées: 428 x 926 points et 1284 x 2778 pixels, 458 ppi, taille physique de l'appareil est de 3.07 x 6.33 pouces ou 78.1 x 160.8 mm. Écran Super Retina XDR de 6.7 pouces.

Taille pour iPhone 12 Pro avec échelle @3x, espace de coordonnées: 390 x 844 points et 1170 x 2532 pixels, 460 ppi, taille physique de l'appareil est de 2.82 x 5.78 pouces ou 71.5 x 146.7 mm. Écran Super Retina XDR de 6.1 pouces.

Taille pour iPhone 12 avec échelle @2x, espace de coordonnées: 585 x 1266 points et 1170 x 2532 pixels, 460 ppi, taille physique de l'appareil est de 2.82 x 5.78 pouces ou 71.5 x 146.7 mm. Écran Super Retina XDR de 6.1 pouces.

Taille pour iPhone 12 mini avec échelle @2x, espace de coordonnées: 540 x 1170 points et 1080 x 2340 pixels, 476 ppi, taille physique de l'appareil est de 2.53 x 5.18 pouces ou 64.2 x 131.5 mm. Écran Super Retina XDR de 5.4 pouces.


Taille pour iPhone 11 Pro Max avec échelle @3x, espace de coordonnées: 414 x 896 points et 1242 x 2688 pixels, 458 ppi, taille physique de l'appareil est de 3.06 x 6.22 pouces ou 77.8 x 158.0 mm. Écran Super Retina XDR de 6.5 pouces.

Taille pour iPhone 11 Pro avec échelle @3x, espace de coordonnées: 375 x 812 points et 1125 x 2436 pixels, 458 ppi, taille physique de l'appareil est de 2.81 x 5.67 pouces ou 71.4 x 144.0 mm. Écran Super Retina XDR de 5.8 pouces.

Taille pour iPhone 11 avec échelle @2x, espace de coordonnées: 414 x 896 points et 828 x 1792 pixels, 326 ppi, taille physique de l'appareil est de 2.98 x 5.94 pouces ou 75.7 x 150.9 mm. Écran Liquid Retina HD de 6.1 pouces.

Taille pour iPhone X Max avec échelle @3x (nom Apple: Super Retina HD 6.5 display), espace de coordonnées: 414 x 896 points et 1242 x 2688 pixels, 458 ppi, taille physique de l'appareil est de 3.05 x 6.20 pouces ou 77.4 x 157.5 mm.

let screen = UIScreen.main
print("Limites de l'écran : \(screen.bounds), Résolution de l'écran : \(screen.nativeBounds), échelle : \(screen.scale)")
//Limites de l'écran iPhone X Max : (0.0, 0.0, 414.0, 896.0), Résolution de l'écran : (0.0, 0.0, 1242.0, 2688.0), échelle : 3.0

Taille pour iPhone X avec échelle @2x (nom Apple: Super Retina HD 6.1" display), espace de coordonnées: 414 x 896 points et 828 x 1792 pixels, 326 ppi, taille physique de l'appareil est de 2.98 x 5.94 pouces ou 75.7 x 150.9 mm.

let screen = UIScreen.main
print("Limites de l'écran : \(screen.bounds), Résolution de l'écran : \(screen.nativeBounds), échelle : \(screen.scale)")
//Limites de l'écran iPhone X : (0.0, 0.0, 414.0, 896.0), Résolution de l'écran : (0.0, 0.0, 828.0, 1792.0), échelle : 2.0

Taille pour iPhone X et iPhone X avec échelle @3x (nom Apple: Super Retina HD 5.8" display), espace de coordonnées: 375 x 812 points et 1125 x 2436 pixels, 458 ppi, taille physique de l'appareil est de 2.79 x 5.65 pouces ou 70.9 x 143.6 mm.

let screen = UIScreen.main
print("Limites de l'écran : \(screen.bounds), Résolution de l'écran : \(screen.nativeBounds), échelle : \(screen.scale)")
//Limites de l'écran iPhone X et X : (0.0, 0.0, 375.0, 812.0), Résolution de l'écran : (0.0, 0.0, 1125.0, 2436.0), échelle : 3.0

entrer la description de l'image ici

Taille pour iPhone 6, 6S, 7 et 8 avec échelle @3x (nom Apple: Retina HD 5.5), espace de coordonnées: 414 x 736 points et 1242 x 2208 pixels, 401 ppi, taille physique de l'écran 2.7 x 4.8 pouces ou 68 x 122 mm. Lorsqu'il est exécuté en mode Zoom, c'est-à-dire sans les nouvelles LaunchImages ou choisi dans la Configuration sur iPhone 6 Plus, l'échelle native est de 2.88 et l'écran est de 320 x 568 points, ce qui est la taille native de l'iPhone 5 :

Limites de l'écran : {{0, 0}, {414, 736}}, Résolution de l'écran : >, échelle : 3.000000, échelle native : 3.000000

Taille pour iPhone 6 et iPhone 6S avec échelle @2x (nom Apple: Retina HD 4.7), espace de coordonnées: 375 x 667 points et 750 x 1334 pixels, 326 ppi, taille physique de l'écran 2.3 x 4.1 pouces ou 58 x 104 mm. Lorsqu'il est exécuté en mode Zoom, c'est-à-dire sans les nouvelles LaunchImages, l'écran est de 320 x 568 points, ce qui est la taille native de l'iPhone 5 :

Limites de l'écran : {{0, 0}, {375, 667}}, Résolution de l'écran : >, échelle : 2.000000, échelle native : 2.000000

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


Voici le code que j'ai utilisé pour vérifier cela (notez que nativeScale ne fonctionne que sur iOS 8) :

UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Limites de l'écran : %@, Résolution de l'écran : %@, échelle : %f, échelle native : %f",
          NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

Remarque : Téléchargez les LaunchImages sinon l'application s'exécutera en mode Zoom et n'affichera pas l'échelle correcte, ou les tailles d'écran. En mode Zoom, l'échelle native et l'échelle ne seront pas les mêmes. Sur un appareil réel, l'échelle peut être de 2.608 sur l'iPhone 6 Plus, même lorsqu'il ne fonctionne pas en mode Zoom, mais il affichera une échelle de 3.0 lors de l'exécution sur le simulateur.

Comparaison iPhone 6 et 6 Plus

3 votes

Je suppose que vous n'avez pas ajouté les nouvelles versions de l'image de lancement. C'est probablement la raison pour laquelle l'application s'exécute en « mode de compatibilité » et que les limites de l'écran sont les anciennes, soit 320x576 sur les deux appareils.

3 votes

Dès que vous ajoutez les nouvelles tailles d'images de lancement, vous obtenez les tailles d'écran correctes (logiques) : 375x667 pour l'iPhone 6 et 414x736 pour le 6+.

1 votes

@DanielRinser Merci pour cela. Je vais essayer.

100voto

Leszek S Points 331

La résolution réelle/physique de l'iPhone 6 Plus est de 1920x1080 mais dans Xcode, vous créez votre interface pour une résolution de 2208x1242 (736x414 points) et sur l'appareil, elle est automatiquement mise à l'échelle à 1920x1080 pixels.

Référence rapide des résolutions de l'iPhone :

Appareil                         Points     Res. Log.    Échelle    Res. Réelle    PPI   Ratio   Taille
iPhone 12 Pro Max, 13 Pro Max    926x428    2778x1284     3x       2778x1284      458   19.5:9   6.7"
iPhone 12, 12 Pro, 13, 13 Pro    844x390    2532x1170     3x       2532x1170      460   19.5:9   6.1"
iPhone 12 mini, 13 mini          812x375    2436x1125     3x       2340x1080      476   19.5:9   5.4"
iPhone XS Max, 11 Pro Max        896x414    2688x1242     3x       2688x1242      458   19.5:9   6.5"
iPhone XR, 11                    896x414    1792x828      2x       1792x828       326   19.5:9   6.1"
iPhone X, XS, 11 Pro             812x375    2436x1125     3x       2436x1125      458   19.5:9   5.8"
iPhone 6+, 6S+, 7+, 8+           736x414    2208x1242     3x       1920x1080      401   16:9     5.5"
iPhone 6, 6S, 7, 8, SE2          667x375    1334x750      2x       1334x750       326   16:9     4.7"
iPhone 5, 5S, 5C, SE1            568x320    1136x640      2x       1136x640       326   16:9     4.0"
iPhone 4, 4S                     480x320    960x640       2x       960x640        326   3:2      3.5"
iPhone 3GS                       480x320    480x320       1x       480x320        163   3:2      3.5"

Résolutions de l'iPhone

0 votes

6 Plus, 6s Plus est de 375 x 667, votre référence rapide des résolutions est incorrecte.

0 votes

@dotrinh Je suis assez sûr que c'est correct et 375x667 est l'iPhone 6 (pas le 6 plus).

0 votes

J'ai corrigé et vérifié cette page d'Apple. developer.apple.com/library/archive/documentation/…

46voto

davidisdk Points 1828

Vous devriez probablement arrêter d'utiliser des images de lancement dans iOS 8 et utiliser un storyboard ou un nib/xib.

  • Dans Xcode 6, ouvrez le menu Fichier et choisissez Nouveau Fichier... iOS Interface utilisateur Écran de démarrage.

  • Ensuite, ouvrez les paramètres de votre projet en cliquant dessus.

  • Dans l'onglet Général, dans la section appelée Icônes d'application et images de lancement, définissez le Fichier de l'écran de démarrage sur les fichiers que vous venez de créer (cela définira UILaunchStoryboardName dans info.plist).

Notez que pour le moment, le simulateur affichera seulement un écran noir, donc vous devez tester sur un vrai appareil.

Ajout d'un fichier xib d'écran de démarrage à votre projet:

Ajout d'un nouveau fichier xib d'écran de démarrage

Configuration de votre projet pour utiliser le fichier xib de l'écran de démarrage au lieu du catalogue de ressources:

Configurer le projet pour utiliser le fichier xib de l'écran de démarrage

1 votes

Presque des instructions parfaites, mais il devrait être Fichier -> NOUVEAU -> Fichier... etc. Il a fallu un certain temps pour trouver le deuxième fichier :) Merci pour l'aide!

0 votes

Comment faites-vous pour que cela ait l'air bien? Quand j'essaie d'y mettre une image, ça devient très fou.

0 votes

Si vous ne faites pas que afficher une image et que vous souhaitez afficher l'interface utilisateur pour le chargement, alors c'est une bonne idée, car une image devrait toujours être dans les tailles appropriées, que ce soit dans une storyboard ou non. De même, si vous pouvez dessiner l'image dans le code, alors vous pourriez contourner cela, je suppose.

24voto

Jeremy Huddleston Points 190

Sur l'appareil physique, les limites de l'écran principal de l'iPhone 6 Plus sont 2208x1242 et nativeBounds est 1920x1080. Il y a une mise à l'échelle matérielle impliquée pour redimensionner l'affichage physique.

Sur le simulateur, les limites de l'écran principal de l'iPhone 6 Plus sont toutes deux de 2208x1242.

En d'autres termes... Les vidéos, OpenGL et autres éléments basés sur CALayers qui traitent des pixels traiteront le véritable tampon d'images de 1920x1080 sur l'appareil (ou 2208x1242 en simulation). Les éléments traitant des points dans UIKit traiteront les limites de 2208x1242 (x3) et seront mis à l'échelle de manière appropriée sur l'appareil.

Le simulateur n'a pas accès au même matériel qui effectue la mise à l'échelle sur l'appareil et il n'y a pas vraiment beaucoup d'avantages à le simuler en logiciel car cela produirait des résultats différents de ceux du matériel. Ainsi, il est logique de définir les nativeBounds de l'écran principal d'un appareil simulé sur les limites de l'écran principal de l'appareil physique.

iOS 8 a ajouté une API à UIScreen (nativeScale et nativeBounds) pour permettre aux développeurs de déterminer la résolution du CADisplay correspondant à l'écran du UIScreen.

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