Apples Website behauptet, die Auflösung sei 1080p: 1920 x 1080
Der für Xcode (8.0 GM, der heute gestartet wird) erforderliche Startbildschirm ist jedoch 2208 x 1242.
Wer hat recht
Das iPhone 6+ rendert intern mit @ 3x Assets mit einer virtuellen Auflösung von 2208 × 1242 (mit 736x414 Punkten) Anzeige. Genauso wie bei der Verwendung einer skalierten Auflösung auf einem Retina-MacBook können sie ein ganzzahliges Vielfaches für Pixel-Assets erreichen, während sie z. 12 pt Text sehen auf dem Bildschirm gleich groß aus.
Also, ja, die Startbildschirme müssen diese Größe haben.
Die 6, die 5, die 5, die 4 und die 4 sind alle 326 Pixel pro Zoll und verwenden @ 2x Assets, um sich an die ungefähr 160 Punkte pro Zoll aller vorherigen Geräte zu halten.
Die 6+ beträgt 401 Pixel pro Zoll. Es würde also hypothetisch ungefähr das 2,46-fache des Vermögens benötigen. Stattdessen verwendet Apple @ 3x Assets und skaliert die gesamte Ausgabe auf etwa 84% ihrer natürlichen Größe.
In der Praxis hat sich Apple für 87% entschieden und den 1080 in 1242 verwandelt. Es bestand kein Zweifel daran, dass so nahe wie möglich 84% gefunden wurden, die immer noch ganzzahlige Größen in beide Richtungen ergaben - 1242/1080 = 2208/1920 genau, wohingegen Sie, wenn Sie den 1080 in beispielsweise 1286 verwandelt hätten, 2286,22 Pixel vertikal rendern müssten, um gut zu skalieren.
Die Antwort ist, dass ältere Apps im vergrößerten Modus 2208 x 1242 ausgeführt werden. Wenn jedoch eine App für die neuen Telefone erstellt wird, sind folgende Auflösungen verfügbar: Super Retina HD 5.8 (iPhone X) 1125 x 2436 (458ppi), Retina HD 5.5 (- iPhone 6, 7, 8 Plus) 1242 x 2208 und Retina HD 4.7 (iPhone 6) 750 x 1334. Dies verursacht die in der Frage erwähnte Verwirrung. Um Apps zu erstellen, die die Vollbildgröße der neuen Telefone nutzen, fügen Sie LaunchImages in den Größen 1125 x 2436, 1242 x 2208, 2208 x 1242 und 750 x 1334 hinzu.
Größe für iPhone X ???? Max mit @ 3x Skalierung (Apple Name: Super Retina HD 6.5 Display "), Koordinatenraum: 414 x 896 Punkte und - 1242 x 2688 Pixel, 458 ppi, die physische Größe des Geräts beträgt 77,4 x 157,5 mm (3,05 x 6,20 Zoll).
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
Größe für iPhone X ???? mit @ 2x Skalierung (Apple Name: Super Retina HD 6.1 "Display), Koordinatenraum: - 414 x 896 Punkte und 828 x 1792 Pixel, 326 ppi, die physische Größe des Geräts beträgt 2,98 x 5,94 Zoll oder 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
Größe für iPhone X ???? und iPhone X mit @ 3x Skalierung (Apple Name: Super Retina HD 5.8 "Display)), Koordinatenraum: 75 x 812 Punkte und 1125 x 2436 Pixel, 458 ppi, Gerätegröße 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
Größe für iPhone 6, 6S, 7 und 8 mit @ 3x Skalierung (Apple-Name: Retina HD 5.5), Koordinatenraum: 414 x 736 Punkte und 1242 x 2208 Pixel, 401 ppi, Bildschirmgröße ist 2,7 x 4,8 Zoll oder 68 x 122 mm. Im gezoomten Modus, d. H. Ohne die neuen Startbilder oder im Setup des iPhone 6 Plus ausgewählt, beträgt der native Maßstab 2,88 und der Bildschirm 320 x 568 Punkte. Dies entspricht der nativen Größe des 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
Größe für iPhone 6 und iPhone 6S mit @ 2x Skalierung (Apple-Name: Retina HD 4.7), Koordinatenraum: 75 x 667 Punkte und 750 x 1334 Pixel, 326 ppi, Bildschirmgröße ist 2,3 x 4,1 Zoll oder 58 x 104 mm. Im gezoomten Modus, d. H. Ohne die neuen LaunchImages, beträgt der Bildschirm 320 x 568 Punkte. Dies entspricht der nativen Größe des 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
Und iPhone 5 zum Vergleich ist 640 x 1136, iPhone 4 640 x 960.
Hier ist der Code, den ich zum Auschecken verwendet habe (beachten Sie, dass nativeScale nur unter iOS 8 ausgeführt wird):
UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);
Hinweis: Laden Sie LaunchImages hoch, andernfalls wird die App im vergrößerten Modus ausgeführt und zeigt nicht die richtige Skalierung oder Bildschirmgröße an. Im gezoomten Modus sind nativeScale
und scale
nicht identisch. Auf einem tatsächlichen Gerät kann der Maßstab auf dem iPhone 6 Plus 2,608 betragen, auch wenn es nicht im gezoomten Modus ausgeführt wird, sondern Beim Ausführen auf dem Simulator wird der Maßstab 3.0 angezeigt.
Die Auflösung des realen/physischen iPhone 6 Plus beträgt 1920 x 1080, aber in Xcode wird die Schnittstelle für eine Auflösung von 2208 x 1242 (736 x 414 Punkte) erstellt und auf dem Gerät automatisch auf 1920 x 1080 Pixel verkleinert.
kurzanleitung für iPhone-Auflösungen:
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"
Sie sollten wahrscheinlich die Verwendung von Startabbildern in iOS 8 einstellen und ein Storyboard oder nib/xib verwenden.
Öffnen Sie in Xcode 6 das Menü File
und wählen Sie New
⟶ File...
⟶ iOS
⟶ User Interface
⟶ Launch Screen
.
Öffnen Sie dann das Einstellungen für Ihr Projekt, indem Sie darauf klicken.
Stellen Sie auf der Registerkarte General
im Abschnitt App Icons and Launch Images
den Launch Screen File
auf die gerade erstellten Dateien ein (dies setzt UILaunchStoryboardName
in info.plist
).
Beachten Sie, dass der Simulator vorerst nur einen schwarzen Bildschirm anzeigt. Daher müssen Sie auf einem realen Gerät testen.
Hinzufügen einer Launch Screen xib-Datei zu Ihrem Projekt:
Konfigurieren Sie Ihr Projekt für die Verwendung der Launch Screen xib-Datei anstelle des Asset-Katalogs:
Auf dem physischen Gerät ist der Hauptbildschirm des iPhone 6 Plus mit 2208 x 1242 und nativeBounds mit 1920 x 1080 . Es ist eine Hardware-Skalierung erforderlich, um die Größe an die physische Anzeige anzupassen.
Auf dem Simulator haben der Hauptbildschirm des iPhone 6 Plus und nativeBounds eine Größe von jeweils 2208 x 1242.
Mit anderen Worten ... Videos, OpenGL und andere auf CALayers
basierende Dinge, die sich mit Pixeln befassen, behandeln die realen 1920x1080 Frame Buffer auf dem Gerät (oder 2208x1242 auf der SIM-Karte) . Dinge, die mit Punkten in UIKit
zu tun haben, werden mit den 2208x1242 (x3) -Grenzen behandelt und lassen Sie sich auf dem Gerät entsprechend skalieren.
Der Simulator hat keinen Zugriff auf die gleiche Hardware, die die Skalierung auf dem Gerät durchführt, und es ist nicht sehr vorteilhaft, sie in der Software zu simulieren, da sie andere Ergebnisse als die Hardware liefern würden. Daher ist es sinnvoll, den nativeBounds
des Hauptbildschirms eines simulierten Geräts an die Grenzen des Hauptbildschirms des physischen Geräts anzupassen.
iOS 8 hat die API zu UIScreen
(nativeScale
und nativeBounds
) hinzugefügt, damit ein Entwickler die Auflösung von CADisplay
entsprechend UIScreen
bestimmen kann.
Für diejenigen wie mich, die sich fragen, wie ältere Apps behandelt werden, habe ich einige Tests und Berechnungen zu diesem Thema durchgeführt.
Dank des @ hannes-sverrisson-Hinweises ging ich davon aus, dass eine Legacy-App mit einer 320x568-Ansicht in iPhone 6 und iPhone 6 plus behandelt wird.
Der Test wurde mit einem einfachen schwarzen Hintergrund [email protected]
mit einem weißen Rand durchgeführt. Der Hintergrund hat eine Größe von 640x1136 Pixel und ist schwarz mit einem inneren weißen Rand von 1 Pixel.
Nachfolgend finden Sie die vom Simulator bereitgestellten Screenshots:
Auf dem iPhone 6-Screenshot sehen wir oben und unten am weißen Rand einen Rand von 1 Pixel und auf dem iPhone 6 plus-Screenshot einen Rand von 2 Pixel. Dies gibt uns einen belegten Platz von 1242x2204 auf dem iPhone 6 plus anstelle von 1242x2208 und 750x1332 auf dem iPhone 6 anstelle von 750x1334.
Wir können davon ausgehen, dass diese toten Pixel das Seitenverhältnis des iPhone 5 einhalten sollen:
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
Zweitens ist es wichtig zu wissen, dass @ 2x-Ressourcen nicht nur auf dem iPhone 6 plus skaliert werden (was @ 3x-Assets voraussetzt), sondern auch auf dem iPhone 6. Dies liegt wahrscheinlich daran, dass eine Nichtskalierung der Ressourcen aufgrund unerwarteter Layouts zu unerwarteten Ergebnissen geführt hätte zur Vergrößerung der Ansicht.
Diese Skalierung ist jedoch in Breite und Höhe nicht gleichwertig. Ich habe es mit einer 264x264 @ 2x-Ressource versucht. Angesichts der Ergebnisse muss ich davon ausgehen, dass die Skalierung direkt proportional zum Pixel/Punkt-Verhältnis ist.
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
Es ist wichtig zu beachten, dass die Skalierung des iPhone 6 in Breite und Höhe (309 x 310) nicht identisch ist. Dies neigt dazu, die obige Theorie zu bestätigen, dass die Skalierung in Breite und Höhe nicht proportional ist, sondern das Pixel/Punkt-Verhältnis verwendet.
Ich hoffe das hilft.
Schauen Sie sich diese Infografik an: http://www.paintcodeapp.com/news/iphone-6-screens-demystified
Es erklärt die Unterschiede zwischen alten iPhones, iPhone 6 und iPhone 6 Plus. Sie können den Vergleich der Bildschirmgrößen in Punkten, gerenderten Pixeln und physischen Pixeln anzeigen. Dort finden Sie auch eine Antwort auf Ihre Frage:
iPhone 6 Plus - mit Retina-Display HD. Der Skalierungsfaktor beträgt 3 und das Bild wird anschließend von gerenderten 2208 × 1242 Pixel auf 1920 × 1080 Pixel verkleinert.
Das Verkleinerungsverhältnis beträgt 1920/2208 = 1080/1242 = 20/23. Das bedeutet, dass alle 23 Pixel des ursprünglichen Renderings auf 20 physische Pixel abgebildet werden müssen. Mit anderen Worten, das Bild wird auf ungefähr 87% seiner ursprünglichen Größe verkleinert.
Update:
Es gibt eine aktualisierte Version der oben genannten Infografik. Es enthält detailliertere Informationen zu Unterschieden bei der Bildschirmauflösung und deckt alle bisherigen iPhone-Modelle ab, einschließlich 4-Zoll-Geräten.
http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
Auch wenn ich den Ton von John Grubers Daring Fireball-Blog im Allgemeinen nicht mag, ist seine Larger iPhone Display Conjecture eine Lektüre wert.
Er vermutete aber genau die Auflösung in Punkten und in Pixeln für beide Modelle, außer dass er (ich auch nicht) Apple, um eine physikalische Anzeige mit kleinerer Auflösung zu erstellen und zu verkleinern (Details finden Sie in der Antwort von @ Tommy).
Der Kern des Ganzen ist, dass man aufhören sollte, in Pixeln zu denken, und anfangen sollte, in Punkten zu denken (dies ist seit einiger Zeit der Fall, es ist keine neue Erfindung) und die sich daraus ergebende physikalische Größe von UI-Elementen. Kurz gesagt, beide neuen iPhone-Modelle verbessern sich in dieser Hinsicht, da die meisten Elemente physisch gleich groß bleiben. Sie können einfach mehr Elemente auf den Bildschirm bringen (für jeden größeren Bildschirm können Sie mehr anpassen).
Ich bin nur ein wenig enttäuscht, dass sie die interne Auflösung nicht 1: 1 auf die tatsächliche Bildschirmauflösung des größeren Modells abbilden.