wake-up-neo.net

Verwirrung bei der Auflösung des iPhone 6 Plus: Xcode oder Apples Website? zur Entwicklung

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

Xcode

265
JasonGenX

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 Mathematik:

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.

308
Tommy

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.

Aktualisiert für die neuen iPhones X ????, X ???? und X ???? Max

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

enter image description here

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.

Comparing iPhone 6 and 6 Plus

113

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"

iPhone resolutions

96
Leszek Szary

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 NewFile...iOSUser InterfaceLaunch 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:

Adding a new Launch Screen xib file

Konfigurieren Sie Ihr Projekt für die Verwendung der Launch Screen xib-Datei anstelle des Asset-Katalogs:

Configure project to use Launch Screen xob

46
davidisdk

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.

13
François Verry

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

12
Darrarski

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.

4
rawpower