Witryna Apple twierdzi, że rozdzielczość wynosi 1080p: 1920 x 1080
Jednak ekran uruchamiania wymagany przez Xcode (8.0 GM wprowadzony dzisiaj) to 2208 x 1242.
Kto ma rację
ios
xcode
ios-simulator
iphone-6
iphone-6-plus
JasonGenX
źródło
źródło
Odpowiedzi:
IPhone 6+ renderuje wewnętrznie przy użyciu zasobów @ 3x w wirtualnej rozdzielczości 2208 × 1242 (z 736x414 punktami), a następnie próbkuje to do wyświetlenia. To samo, co przy użyciu skalowanej rozdzielczości na MacBooku Retina - pozwala na trafienie całkowitej wielokrotności zasobów pikselowych, przy jednoczesnym zachowaniu np. Tekstu 12 pt na ekranie tego samego rozmiaru.
Tak, ekrany uruchamiania muszą mieć taki rozmiar.
Matematyka:
Wszystkie 6, 5, 5, 4 i 4 mają 326 pikseli na cal i używają zasobów @ 2x, aby trzymać się około 160 punktów na cal wszystkich poprzednich urządzeń.
6+ to 401 pikseli na cal. Dlatego hipotetycznie potrzebuje około 2,46x zasobów. Zamiast tego Apple używa zasobów @ 3x i skaluje całą produkcję do około 84% jej naturalnego rozmiaru.
W praktyce Apple zdecydowało się na więcej niż 87%, zmieniając 1080 na 1242. Bez wątpienia było to znaleźć coś tak zbliżonego do 84%, które wciąż produkowało integralne rozmiary w obu kierunkach - dokładnie 1242/1080 = 2208/1920 , natomiast jeśli zmieniłeś 1080 na, powiedzmy, 1286, musiałbyś w jakiś sposób renderować 2286.22 pikseli w pionie, aby dobrze skalować.
źródło
[UIScreen mainScreen].bounds.size.height
zwraca 736 w symulatorze iPhone'a 6+ w trybie portretowym. Jest to wartość 2208 podzielona przez skalę 3. Szerokość wynosi 414.Odpowiedź jest taka, że starsze aplikacje działają w trybie powiększenia 2208 x 1242. Ale gdy aplikacja jest budowana dla nowych telefonów, dostępne są rozdzielczości: Super Retina HD 5.8 (iPhone X) 1125 x 2436 (458ppi) , Retina HD 5.5 ( iPhone 6, 7, 8 Plus ) 1242 x 2208 i Retina HD 4.7 ( iPhone 6 ) 750 x 1334 . To powoduje zamieszanie wspomniane w pytaniu. Aby budować aplikacje wykorzystujące pełny ekran nowych telefonów, dodaj LaunchImages w rozmiarach: 1125 x 2436, 1242 x 2208, 2208 x 1242 i 750 x 1334.
Zaktualizowano dla nowych iPhone'ów 11, 11 Pro, 11 Pro Max
Rozmiar dla iPhone'a 11 Pro Max ze skalowaniem @ 3x , przestrzeń współrzędnych: 414 x 896 punktów i 1242 x 2688 pikseli, 458 ppi, fizyczny rozmiar urządzenia to 3,06 x 6,22 cala lub 77,8 x 158,0 mm. 6,5-calowy wyświetlacz Super Retina XDR.
Rozmiar dla iPhone'a 11 Pro ze skalowaniem @ 3x , przestrzeń współrzędnych: 375 x 812 punktów i 1125 x 2436 pikseli, 458 ppi, fizyczny rozmiar urządzenia to 2,81 x 5,67 cala lub 71,4 x 144,0 mm. Wyświetlacz Super Retina XDR 5,8 ".
Rozmiar dla iPhone'a 11 ze skalowaniem @ 2x , odstęp współrzędnych: 414 x 896 punktów i 828 x 1792 pikseli, 326 ppi, fizyczny rozmiar urządzenia to 2,98 x 5,94 cala lub 75,7 x 150,9 mm. Wyświetlacz 6.1 "Liquid Retina HD.
Rozmiar dla iPhone'a X🅂 Max ze skalowaniem @ 3x (nazwa Apple: wyświetlacz Super Retina HD 6.5 " ), przestrzeń współrzędnych: 414 x 896 punktów i 1242 x 2688 pikseli, 458 ppi, fizyczny rozmiar urządzenia to 3,05 x 6,20 cala lub 77,4 x 157,5 mm
Rozmiar dla iPhone'a X🅁 ze skalowaniem @ 2x (nazwa Apple: wyświetlacz Super Retina HD 6.1 " ), przestrzeń współrzędnych: 414 x 896 punktów i 828 x 1792 pikseli, 326 ppi, fizyczny rozmiar urządzenia to 2,98 x 5,94 cala lub 75,7 x 150,9 mm .
Rozmiar dla iPhone'a X🅂 i iPhone'a X ze skalowaniem @ 3x (nazwa Apple: wyświetlacz Super Retina HD 5.8 " ), przestrzeń współrzędnych: 375 x 812 punktów i 1125 x 2436 pikseli, 458 ppi, fizyczny rozmiar urządzenia to 2,79 x 5,65 cala lub 70,9 x 143,6 mm.
Rozmiar dla iPhone'a 6, 6S, 7 i 8 ze skalowaniem @ 3x (nazwa Apple: Retina HD 5.5 ), przestrzeń współrzędnych: 414 x 736 punktów i 1242 x 2208 pikseli, 401 ppi, fizyczny rozmiar ekranu wynosi 2,7 x 4,8 cala lub 68 x 122 mm . Podczas pracy w trybie powiększenia, tj. Bez nowych obrazów uruchamiania lub wybranych w Instalatorze na iPhonie 6 Plus, natywna skala wynosi 2,88, a ekran ma 320 x 568 punktów, co jest rodzimym rozmiarem iPhone'a 5:
Rozmiar dla iPhone'a 6 i iPhone'a 6S ze skalowaniem @ 2x (nazwa Apple: Retina HD 4.7 ), przestrzeń współrzędnych: 375 x 667 punktów i 750 x 1334 pikseli, 326 ppi, fizyczny rozmiar ekranu to 2,3 x 4,1 cala lub 58 x 104 mm . Podczas pracy w trybie powiększenia, tj. Bez nowej funkcji uruchamiania, ekran ma 320 x 568 punktów, co jest rodzimym rozmiarem iPhone'a 5:
I iPhone 5 porównawcze 640 x 1136, iPhone 4 640 x 960.
Oto kod, którego użyłem do sprawdzenia tego (pamiętaj, że nativeScale działa tylko na iOS 8):
Uwaga: Prześlij LaunchImages, w przeciwnym razie aplikacja będzie działać w trybie powiększenia i nie będzie wyświetlać prawidłowego skalowania ani rozmiarów ekranu. W trybie powiększenia znaki
nativeScale
iscale
nie będą takie same. Na rzeczywistym urządzeniu skala może wynosić 2,608 na iPhonie 6 Plus, nawet jeśli nie działa w trybie powiększenia, ale pokaże skalę 3,0 podczas działania na symulatorze.źródło
Rzeczywista / fizyczna rozdzielczość iPhone'a 6 Plus to 1920x1080, ale w Xcode tworzysz interfejs dla rozdzielczości 2208x1242 (736x414 punktów), a na urządzeniu jest on automatycznie skalowany do 1920x1080 pikseli.
Skrócone omówienie rozdzielczości iPhone'a:
źródło
Prawdopodobnie powinieneś przestać używać obrazów uruchamiania w iOS 8 i używać scenorysu lub stalówki / Xib.
W Xcode 6 otwórz
File
menu i wybierzNew
⟶File...
⟶iOS
⟶User Interface
⟶Launch Screen
.Następnie otwórz ustawienia swojego projektu, klikając go.
W
General
zakładce w sekcji o nazwieApp Icons and Launch Images
, należy ustawićLaunch Screen File
dla właśnie utworzonych plików (będzie ustawionaUILaunchStoryboardName
winfo.plist
).Zauważ, że na razie symulator pokazuje tylko czarny ekran, więc musisz przetestować na prawdziwym urządzeniu .
Dodawanie pliku xib ekranu uruchamiania do projektu:
Konfigurowanie projektu do używania pliku xib ekranu uruchamiania zamiast katalogu zasobów:
źródło
Na urządzeniu fizycznym granice ekranu głównego iPhone'a 6 Plus to 2208 x 1242, a natywna granica to 1920 x 1080 . W celu zmiany rozmiaru wyświetlacza fizycznego konieczne jest skalowanie sprzętowe.
W symulatorze granice ekranu głównego iPhone'a 6 Plus i natywna krawędź to 2208 x 1242.
Innymi słowy ... Wideo, OpenGL i inne rzeczy oparte na
CALayers
tym rozwiązaniu z pikselami zajmą się prawdziwym buforem ramki 1920 x 1080 na urządzeniu (lub 2208 x 1242 na karcie SIM). Rzeczy dotyczące punktówUIKit
będą dotyczyły granic 2208 x 1242 (x3) i odpowiednio skalowane na urządzeniu.Symulator nie ma dostępu do tego samego sprzętu, który wykonuje skalowanie na urządzeniu, i nie ma zbyt wiele korzyści z symulacji w oprogramowaniu, ponieważ przyniosłyby one inne wyniki niż sprzęt. Dlatego sensowne jest ustawienie
nativeBounds
ekranu głównego symulowanego urządzenia w granicach ekranu głównego urządzenia fizycznego.iOS 8 dodał API do
UIScreen
(nativeScale
inativeBounds
), aby umożliwić programistom określenie rozdzielczościCADisplay
odpowiadającejUIScreen
.źródło
Dla tych, którzy zastanawiają się, jak traktowane są starsze aplikacje, przeprowadziłem trochę testów i obliczeń na ten temat.
Dzięki podpowiedzi @ hannes-sverrisson zacząłem przy założeniu, że starsza aplikacja jest traktowana w widoku 320x568 w telefonie iPhone 6 i iPhone 6 plus.
Test został wykonany na prostym czarnym tle
[email protected]
z białą obwódką. Tło ma rozmiar 640 x 1136 pikseli i jest czarne z wewnętrzną białą ramką 1 piksela.Poniżej znajdują się zrzuty ekranu dostarczone przez symulator:
Na zrzucie ekranu iPhone'a 6 widzimy margines 1 piksela na górze i na dole białej ramki oraz 2-pikselowy margines na ekranie iPhone'a 6 plus. To daje nam zużytą przestrzeń 1242 x 2204 na iPhone 6 plus zamiast 1242 x 2208 i 750 x 1332 na iPhone 6 zamiast 750 x 1334.
Możemy założyć, że te martwe piksele mają respektować proporcje iPhone'a 5:
Po drugie, ważne jest, aby wiedzieć, że zasoby @ 2x będą skalowane nie tylko na iPhonie 6 plus (który oczekuje zasobów @ 3x), ale także na iPhonie 6. Prawdopodobnie dlatego, że brak skalowania zasobów doprowadziłby do nieoczekiwanych układów, z powodu do powiększenia widoku.
Skalowanie to nie jest jednak równoważne pod względem szerokości i wysokości. Próbowałem z zasobem 264 x 264 @ 2x. Biorąc pod uwagę wyniki, muszę założyć, że skalowanie jest wprost proporcjonalne do stosunku pikseli do punktów.
Ważne jest, aby pamiętać, że skalowanie iPhone'a 6 nie jest takie samo pod względem szerokości i wysokości (309 x 310). Potwierdza to powyższą teorię, że skalowanie nie jest proporcjonalne w szerokości i wysokości, ale wykorzystuje stosunek pikseli do punktów.
Mam nadzieję, że to pomoże.
źródło
Sprawdź tę infografikę: http://www.paintcodeapp.com/news/iphone-6-screens-demystified
Wyjaśnia różnice między starymi iPhone'ami, iPhone'ami 6 i iPhone'ami 6 Plus. Możesz zobaczyć porównanie rozmiarów ekranu w punktach, renderowanych pikselach i pikselach fizycznych. Znajdziesz tam również odpowiedź na swoje pytanie:
Aktualizacja:
Istnieje wspomniana powyżej zaktualizowana wersja infografiki. Zawiera bardziej szczegółowe informacje o różnicach rozdzielczości ekranu i obejmuje wszystkie dotychczasowe modele iPhone'a, w tym urządzenia 4-calowe.
http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
źródło
Nawet jeśli ogólnie nie lubię tonu blogu Daring Fireball Johna Grubera, jego Większa hipoteza wyświetlacza iPhone'a jest warta przeczytania.
Zgadł, ale dokładnie uzyskał zarówno rozdzielczość w punktach, jak i pikselach dla obu modeli, z tym wyjątkiem, że nie spodziewał się (ja też), że Apple zbuduje fizyczny wyświetlacz o niższej rozdzielczości i zmniejszy skalę (szczegóły w odpowiedzi @ Tommy'ego).
Istotą tego wszystkiego jest to, że należy przestać myśleć w kategoriach pikseli i zacząć myśleć w kategoriach punktów (tak było od dłuższego czasu, nie jest to nowy wynalazek) i wynikającej z tego fizycznej wielkości elementów interfejsu użytkownika. Krótko mówiąc, oba nowe modele iPhone'a poprawiają się pod tym względem, ponieważ fizycznie większość elementów pozostaje tego samego rozmiaru, możesz po prostu zmieścić ich więcej na ekranie (dla każdego większego ekranu zmieścisz więcej).
Jestem tylko trochę rozczarowany, że nie zachowali mapowania wewnętrznej rozdzielczości na rzeczywistą rozdzielczość ekranu 1: 1 dla większego modelu.
źródło