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
L'iPhone 6+ effectue le rendu en interne à l'aide de @ 3x actifs à une résolution virtuelle de 2208 × 1242 (avec 736x414 points), puis échantillonne ce résultat pendant afficher. Identique à l’utilisation d’une résolution mise à l’échelle sur un MacBook Retina - cela leur permet d’atteindre un multiple entier d’actifs de pixels tout en conservant par exemple, par exemple. Le texte 12 pt a la même taille à l’écran.
Donc, oui, les écrans de lancement doivent avoir cette taille.
Les 6, les 5, les 5, les 4 et les 4 mesurent tous 326 pixels par pouce et utilisent des ressources @ 2x pour respecter les quelque 160 points par pouce de tous les périphériques précédents.
Le 6+ est de 401 pixels par pouce. Donc, il aurait théoriquement besoin d'environ @ 2,46 actifs. Au lieu de cela, Apple utilise les ressources @ 3x et réduit la sortie complète à environ 84% de sa taille naturelle.
Dans la pratique, Apple a décidé d’en faire plus avec 87%, transformant ainsi le 1080 en 1242. Nul doute que c’était de trouver un résultat aussi proche que possible de 84% qui produisait encore des tailles intégrales dans les deux sens - 1242/1080 = 2208/1920 exactement, alors que si vous aviez converti le 1080 en, disons, 1286, vous auriez en quelque sorte besoin de restituer 2286,22 pixels verticalement pour une bonne mise à l’échelle.
La réponse est que les anciennes applications fonctionnent en mode zoomé 2208 x 1242. Mais quand une application est construite pour les nouveaux téléphones, les résolutions disponibles sont les suivantes: 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 cause la confusion mentionnée dans la question. Pour créer des applications utilisant la taille plein écran des nouveaux téléphones, ajoutez LaunchImages dans les tailles suivantes: 1125 x 2436, 1242 x 2208, 2208 x 1242 et 750 x 1334.
Taille pour iPhone X ???? Max avec @ 3 x mise à l'échelle (nom Apple: écran Super Retina HD 6.5 "), espace de coordonnées: 414 x 896 points et 1242 x 2688 pixels, 458 ppp, la taille physique du périphérique est de 3,05 x 6,20 po ou 77,4 x 157,5 mm.
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X???? Max Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 1242.0, 2688.0), scale: 3.0
Taille pour iPhone X ???? avec @ 2x mise à l'échelle (Apple nom: Super Retina HD 6.1 "écran ), espace de coordonnées: 414 x 896 points et 828 x 1792 pixels, 326 ppp, la taille physique du périphérique est de 2,98 x 5,94 in ou 75,7 x 150,9 mm.
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X???? Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 828.0, 1792.0), scale: 2.0
Taille pour iPhone X ???? et iPhone X avec @ 3x mise à l'échelle (nom Apple: Super Retina HD 5.8 "affichage ), coordonnées espace: 375 x 812 points et 1125 x 2436 pixels, 458 ppp , la taille physique du périphérique est de 2,79 x 5,65 pouces ou 70,9 x 143,6 mm.
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X???? and X Screen bounds: (0.0, 0.0, 375.0, 812.0), Screen resolution: (0.0, 0.0, 1125.0, 2436.0), scale: 3.0
Taille pour iPhone 6, 6S, 7 et 8 avec @ 3x (Nom Apple: Retina HD 5.5 ), espace de coordonnées: 414 x 736 points et 1242 x 2208 pixels, 401 ppp, la taille physique de l'écran est 2,7 x 4,8 in ou 68 x 122 mm . En mode zoom, c'est-à-dire sans les nouvelles LaunchImages ou choisies dans la configuration de l'iPhone 6 Plus, l'échelle native est de 2,88 et l'écran est de 320 x 568 points, ce qui correspond à la taille native de l'iPhone 5:
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
Taille pour iPhone 6 et iPhone 6S avec redimensionnement @ 2x (nom Apple) : Retina HD 4.7 ), espace de coordonnées: 375 x 667 points et 750 x 1334 pixels, 326 ppp, la taille physique de l'écran est de 2,3 x 4,1 in ou 58 x 104 mm . En mode zoom, c’est-à-dire sans les nouvelles LaunchImages, l’écran affiche 320 x 568 points, ce qui correspond à la taille native de l’iPhone 5:
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 iPhone 5 à des fins de comparaison est de 640 x 1136, iPhone 4 640 x 960.
Voici le code que j'ai utilisé pour vérifier ceci (notez que nativeScale ne fonctionne que sur iOS 8):
UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);
Remarque: téléchargez LaunchImages, sinon l'application s'exécutera en mode zoomé sans afficher la mise à l'échelle correcte ni les tailles d'écran. En mode zoomé, nativeScale
et scale
ne seront pas les mêmes. Sur un appareil, l'échelle peut être 2,608 sur l'iPhone 6 Plus, même si ce n'est pas le cas. fonctionnant en mode zoomé, mais il affichera une échelle de 3,0 lorsqu’il sera exécuté sur le simulateur.
La résolution réelle/physique de l'iPhone 6 Plus est de 1920x1080, mais dans Xcode, l'interface est définie pour une résolution de 2208x1242 (736x414 points). Sur l'appareil, elle est automatiquement réduite à 1920x1080 pixels.
référence rapide des résolutions iPhone:
Device Points Pixels Scale Physical Pixels Physical PPI Size
iPhone X 812x375 2436x1125 3x 2436x1125 458 5.8"
iPhone 6 Plus 736x414 2208x1242 3x 1920x1080 401 5.5"
iPhone 6 667x375 1334x750 2x 1334x750 326 4.7"
iPhone 5 568x320 1136x640 2x 1136x640 326 4.0"
iPhone 4 480x320 960x640 2x 960x640 326 3.5"
iPhone 3GS 480x320 480x320 1x 480x320 163 3.5"
Vous devriez probablement cesser d'utiliser les images de lancement dans iOS 8 et utiliser un storyboard ou nib/xib.
Dans Xcode 6 , ouvrez le menu File
et choisissez New
⟶ File...
iOS
⟶ User Interface
⟶ Launch Screen
.
Ensuite, ouvrez le paramètres de votre projet en cliquant dessus.
Dans l'onglet General
, dans la section intitulée App Icons and Launch Images
, définissez le Launch Screen File
sur les fichiers que vous venez de créer (cela définira UILaunchStoryboardName
dans info.plist
).
Notez que pour le moment, le simulateur n'affichera qu'un écran noir, vous devez donc tester sur un appareil réel.
Ajout d'un fichier xib Ecran de lancement à votre projet:
Configuration de votre projet pour utiliser le fichier xib Launch Screen au lieu du catalogue d'actifs:
Sur le périphérique physique, les limites de l'écran principal de l'iPhone 6 Plus sont 2208x1242 et nativeBounds est 1920x1080 . La mise à l'échelle matérielle est nécessaire pour redimensionner l'affichage physique.
Sur le simulateur, les limites de l'écran principal de l'iPhone 6 Plus et celles de NativeBounds sont toutes les deux de 2208x1242.
En d'autres termes ... Les vidéos, OpenGL et autres éléments basés sur CALayers
traitant de pixels traitent du réel 1920x1080 frame frame sur le périphérique (ou 2208x1242 sur sim). Les choses traitant de points dans UIKit
seront traitées avec les bornes 2208x1242 (x3) et seront mises à l'échelle selon le cas sur l'appareil.
Le simulateur n'a pas accès au même matériel que celui qui effectue la mise à l'échelle sur l'appareil et il n'est pas vraiment avantageux de le simuler dans un logiciel, car il produirait des résultats différents de ceux du matériel. Il est donc judicieux de régler la nativeBounds
de l'écran principal d'un périphérique simulé sur les limites de l'écran principal du périphérique physique.
iOS 8 a ajouté une API à UIScreen
(nativeScale
et nativeBounds
) pour permettre à un développeur de déterminer la résolution de CADisplay
correspondant à UIScreen
.
Pour ceux qui, comme moi, se demandent comment sont traitées les applications traditionnelles, j'ai fait quelques essais et calculs sur le sujet.
Grâce à @ hannes-sverrisson, j'ai commencé à penser qu'une application existante est traitée avec une vue 320x568 sur iPhone 6 et iPhone 6 plus.
Le test a été réalisé avec un simple fond noir [email protected]
avec une bordure blanche. L'arrière-plan a une taille de 640x1136 pixels et il est noir avec une bordure blanche intérieure de 1 pixel.
Voici les captures d'écran fournies par le simulateur:
Sur la capture d'écran de l'iPhone 6, vous pouvez voir une marge de 1 pixel en haut et en bas de la bordure blanche et une marge de 2 pixels sur la capture d'écran de l'iPhone 6 plus. Cela nous donne un espace utilisé de 1242x2204 sur l'iPhone 6 plus, au lieu de 1242x2208, et de 750x1332 sur l'iPhone 6, au lieu de 750x1334.
Nous pouvons supposer que ces pixels morts sont censés respecter le rapport de forme de l'iPhone 5:
iPhone 5 640 / 1136 = 0.5634
iPhone 6 (used) 750 / 1332 = 0.5631
iPhone 6 (real) 750 / 1334 = 0.5622
iPhone 6 plus (used) 1242 / 2204 = 0.5635
iPhone 6 plus (real) 1242 / 2208 = 0.5625
Deuxièmement, il est important de savoir que les ressources @ 2x seront mises à l'échelle non seulement sur l'iPhone 6 plus (qui attend @ 3 actifs), mais également sur l'iPhone 6. Cela s'explique probablement par le fait que l'absence de mise à l'échelle des ressources aurait conduit à des dispositions inattendues. à l'élargissement de la vue.
Cependant, cette mise à l'échelle n'est pas équivalente en largeur et en hauteur. Je l'ai essayé avec une ressource 264x264 @ 2x. Compte tenu des résultats, je dois supposer que la mise à l'échelle est directement proportionnelle au rapport pixels/points.
Device Width scale Computed width Screenshot width
iPhone 5 640 / 640 = 1.0 264 px
iPhone 6 750 / 640 = 1.171875 309.375 309 px
iPhone 6 plus 1242 / 640 = 1.940625 512.325 512 px
Device Height scale Computed height Screenshot height
iPhone 5 1136 / 1136 = 1.0 264 px
iPhone 6 1332 / 1136 = 1.172535 309.549 310 px
iPhone 6 plus 2204 / 1136 = 1.940141 512.197 512 px
Il est important de noter que la mise à l'échelle de l'iPhone 6 n'est pas la même en largeur et en hauteur (309x310). Cela tend à confirmer la théorie ci-dessus selon laquelle la mise à l'échelle n'est pas proportionnelle en largeur et en hauteur, mais utilise le rapport pixels/points.
J'espère que ça aide.
Découvrez cette infographie: http://www.paintcodeapp.com/news/iphone-6-screens-demystified
Il explique les différences entre les anciens iPhone, iPhone 6 et iPhone 6 Plus. Vous pouvez comparer les tailles d'écran en points, en pixels rendus et en pixels physiques. Vous y trouverez également réponse à votre question:
iPhone 6 Plus - avec écran Retina HD. Le facteur de mise à l'échelle est 3 et l'image est ensuite réduite de 2208 × 1242 pixels à 1920 × 1080 pixels.
Le rapport de réduction d'échelle est 1920/2208 = 1080/1242 = 20/23. Cela signifie que tous les 23 pixels du rendu d'origine doivent être mappés à 20 pixels physiques. En d'autres termes, l'image est réduite à environ 87% de sa taille d'origine.
Mise à jour:
Il existe une version mise à jour de l'infographie mentionnée ci-dessus. Il contient des informations plus détaillées sur les différences de résolution d'écran et couvre jusqu'à présent tous les modèles d'iPhone, y compris les appareils 4 pouces.
http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
Même si je n'aime généralement pas le ton du blog Daring Fireball de John Gruber, sa lecture de la plus grande visualisation de l'iPhone vaut la peine d'être lue.
Il a deviné mais a exactement exactement la résolution en points et en pixels pour les deux modèles, sauf qu'il (moi non plus) ne s'attendait pas à Apple pour créer un affichage physique de résolution plus petite et réduire l'échelle (les détails figurent dans la réponse de @ Tommy).
En gros, il faut cesser de penser en termes de pixels et en termes de points (c'est le cas depuis un certain temps, ce n'est pas une invention récente) et la taille physique des éléments de l'interface utilisateur qui en résulte. En bref, les deux nouveaux modèles d'iPhone s'améliorent à cet égard, car la plupart des éléments restent physiquement de la même taille. Vous pouvez simplement en afficher davantage sur l'écran (pour chaque écran plus grand, vous pouvez en installer davantage).
Je suis juste un peu déçu de ne pas avoir gardé le mappage de la résolution interne sur la résolution d'écran réelle 1: 1 pour le plus grand modèle.