Плутанина роздільної здатності iPhone 6 Plus: Xcode чи веб-сайт Apple? для розвитку


265

Веб-сайт Apple стверджує, що роздільна здатність дорівнює 1080p: 1920 x 1080

Однак екран запуску, необхідний для Xcode (8,0 GM запущено сьогодні), становить 2208 x 1242.

Хто прав?

Xcode


Стартові зображення для iPhone 6+ повинні бути 1242x2208 та 2208x1242. Принаймні, це змушує програми працювати належним чином у тренажері (і це зафіксовано у HIG). Я не зрозумів, чому це відрізняється від передбачуваного фізичного розміру екрана 1920x1080.
rmaddy

2
дуже дивна невідповідність.
JasonGenX

14
Відмінне пояснення: paintcodeapp.com/news/iphone-6-screens-demystified
Andreas Ley

Це може змінитися в стабільній версії Xcode 6.1. Є це?
Джайпракаш Дюбі

3
Щоб оновити посилання від Andreas, перегляньте "Кінцевий посібник з iPhone Resolutions" paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
Девід Джеймс

Відповіді:


308

IPhone 6+ здійснює внутрішнє використання активів @ 3x при віртуальній роздільній здатності 2208 × 1242736x414 балами), а потім вибірки, які не відображаються для відображення. Так само, як використання масштабованої роздільної здатності на Retina MacBook - це дозволяє їм потрапляти на інтегральне множину для піксельних активів, зберігаючи, наприклад, текст на 12 пт, виглядати на екрані однакового розміру.

Отже, так, екрани запуску повинні бути такого розміру.

Математика:

6, 5s, 5, 4s і 4 - це 326 пікселів на дюйм, і використовуйте активи @ 2x, щоб дотримуватися приблизно 160 точок на дюйм усіх попередніх пристроїв.

6+ - 401 пікселів на дюйм. Так що гіпотетично знадобиться приблизно @ 2,46x активів. Натомість Apple використовує активи @ 3x і зменшує загальний обсяг виробництва приблизно до 84% від натурального розміру.

На практиці Apple вирішила отримати більше 87%, перетворивши 1080 на 1242. Без сумніву, було знайти щось максимально наближене до 84%, яке все-таки дало інтегральні розміри в обох напрямках - 1242/1080 = 2208/1920 рівно , тоді як якщо ви перетворили 1080, скажімо, на 1286, вам потрібно було б якось вертикально відтворити 2286,22 пікселів, щоб добре масштабувати.


6
Як ви обчислили це -> "віртуальна роздільна здатність 2208 × 1242 (з 736x414 балами)", і це "потрібно приблизно @ 2,46x активів" Що буде UIScreen mainScreen] .bounds.size.height повернеться за 6+? 568, 568 * 3 (1704) або 1920.
мск

1
Можливо, додайте примітку до цієї відповіді про зображення запуску? (Див відповідь Hannes в) Корисно мати на увазі , для існуючих додатків модернізується ( в іншому випадку він працює на 320x576 @ 3x - Я розгубилася на деякий час!)
Джозеф Хамфрі

2
@msk [UIScreen mainScreen].bounds.size.heightповертає 736 в тренажері iPhone 6+, коли знаходиться в портреті. Це значення 2208, поділене на шкалу 3. Ширина - 414.
rmaddy

1
Це не точно однаковий розмір з @ 3x з роздільною здатністю 1242 * 2208, це 6% розтягнуто.
Бінаріан

4
Який жахливий хитрощі! Загальносистемна втрата продуктивності, пам’яті та різкості лише для того, щоб зробити деякі коригування розміру на рівні API трохи простішими! Ну , я думаю , все це буде мати сенс , коли вони випустити iPhone 7 Plus з 5.5 "461 PPI дисплея.
вир

114

Відповідь полягає в тому, що старіші програми працюють у режимі масштабування 2208 x 1242. Але коли створено додаток для нових телефонів, наявними роздільними можливостями є: Super Retina HD 5.8 (iPhone X) 1125 x 2436 (458ppi) , Retina HD 5.5 ( iPhone 6, 7, 8 Plus ) 1242 x 2208 та Retina HD 4.7 ( iPhone 6 ) 750 x 1334 . Це викликає плутанину, згадану у питанні. Для створення додатків, які використовують повний екран нових телефонів, додайте LaunchImages розмірами: 1125 x 2436, 1242 x 2208, 2208 x 1242 та 750 x 1334.

Оновлено для нових iPhone 11, 11 Pro, 11 Pro Max

Розмір для iPhone 11 Pro Max з масштабуванням @ 3x , координатний простір: 414 x 896 точок та 1242 x 2688 пікселів, 458 ppi, фізичний розмір пристрою - 3,06 x 6,22 дюйма або 77,8 x 158,0 мм. 6,5-дюймовий дисплей Super Retina XDR.

Розмір для iPhone 11 Pro з масштабуванням @ 3x , координатний простір: 375 x 812 точок та 1125 x 2436 пікселів, 458 ppi, фізичний розмір пристрою - 2,81 x 5,67 в або 71,4 x 144,0 мм. 5.8 "Дисплей Super Retina XDR

Розмір для iPhone 11 з @ 2x масштабуванням, координатним простором: 414 x 896 точок та 828 x 1792 пікселів, 326 ppi, фізичний розмір пристрою - 2,98 x 5,94 дюйма або 75,7 x 150,9 мм. 6.1 "Рідкий дисплей HD сітківки

Розмір для iPhone X🅂 Max з масштабуванням @ 3x (назва Apple: Super Retina HD 6.5 дисплей " ), простір координат: 414 x 896 точок та 1242 x 2688 пікселів, 458 ppi, фізичний розмір пристрою - 3,05 x 6,20 дюйма або 77,4 x 157,5 мм.

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

Розмір для iPhone X🅁 з @ 2x масштабуванням (назва Apple: дисплей Super Retina HD 6.1 " ), координатний простір: 414 x 896 точок та 828 x 1792 пікселів, 326 ppi, фізичний розмір пристрою - 2,98 х 5,94 дюйма або 75,7 x 150,9 мм .

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

Розмір для iPhone X🅂 та iPhone X із масштабуванням @ 3x (назва Apple: Super Retina HD 5.8 "дисплей ), простір координат: 375 x 812 точок та 1125 x 2436 пікселів, 458 ppi, фізичний розмір пристрою - 2,79 х 5,65 дюйма або 70,9 х 143,6 мм.

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

введіть тут опис зображення

Розмір для iPhone 6, 6S, 7 і 8 з @ 3x масштабуванням (назва Apple: Retina HD 5.5 ), простір координат: 414 x 736 точок та 1242 x 2208 пікселів, 401 ppi, фізичний розмір екрана становить 2,7 х 4,8 дюйма або 68 х 122 мм . Під час роботи в масштабованому режимі, тобто без нових LaunchImages або вибраних у програмі Настройка на iPhone 6 Plus, нативна шкала становить 2,88, а екран - 320 x 568 балів, що є основним розміром 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

Розмір для iPhone 6 та iPhone 6S з @ 2x масштабуванням (назва Apple: Retina HD 4.7 ), простір координат: 375 x 667 точок та 750 x 1334 пікселів, 326 ppi, фізичний розмір екрана становить 2,3 x 4,1 дюйма або 58 x 104 мм . Під час роботи в масштабованому режимі, тобто без нових LaunchImages, екран складає 320 x 568 точок, що є основним розміром 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

А iPhone 5 для порівняння - 640 x 1136, iPhone 4 640 x 960.


Ось код, який я використав, щоб перевірити це (зауважте, що nativeScale працює лише на iOS 8):

UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
          NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

Примітка. Завантажте LaunchImages, інакше додаток запуститься в масштабованому режимі і не покаже правильного масштабування чи розмірів екрана. У режимі збільшення nativeScaleта значення scaleне буде однаковим. На фактичному пристрої масштаб може становити 2,608 на iPhone 6 Plus, навіть коли він не працює в масштабованому режимі, але він буде показувати масштаб 3,0 під час роботи на тренажері.

Порівнюючи iPhone 6 та 6 Plus


3
Я думаю, ви не додали нові версії запуску зображень. Можливо, тому програма працює в режимі сумісності, а межі екрана - це старі 320х576 обох пристроїв.
Даніель Рінсер

3
Як тільки ви додасте нові розміри стартового зображення, ви отримаєте правильні (логічні) розміри екрану: 375x667 для iPhone 6 та 414x736 для 6+.
Даніель Рінсер

1
@DanielRinser Дякую за це. Я спробую це.
Сверріссон

@DanielRinser дякує за ваш внесок у зображення запуску. Я оновив відповідь на основі ваших даних.
Сверріссон

а що з активами для iPhone 4? Як їх назвати та як їх розмістити в каталозі активів, якщо немає слота для них? Каталог активів має 3 слоти для зображень iPhone: 1x, 2x та 3x. Якщо 2x та 3x призначені для активів iPhone 6 та 6+, чи слід розміщувати активи iPhone 4 на 1x? Я не думаю, що так.
Качка

96

Справжня / фізична роздільна здатність iPhone 6 Plus - 1920x1080, але в Xcode ви створюєте інтерфейс для роздільної здатності 2208x1242 (736x414 балів), а на пристрої він автоматично зменшується до 1920x1080 пікселів.

Швидка довідка щодо резолюцій iPhone:

Device          Points    Pixels     Scale  Physical Pixels   PPI   Ratio   Size
iPhone XS Max   896x414   2688x1242  3x     2688x1242         458   19.5:9  6.5"
iPhone XR       896x414   1792x828   2x     1792x828          326   19.5:9  6.1"
iPhone X        812x375   2436x1125  3x     2436x1125         458   19.5:9  5.8"
iPhone 6 Plus   736x414   2208x1242  3x     1920x1080         401   16:9    5.5"
iPhone 6        667x375   1334x750   2x     1334x750          326   16:9    4.7"
iPhone 5        568x320   1136x640   2x     1136x640          326   16:9    4.0"
iPhone 4        480x320   960x640    2x     960x640           326   3:2     3.5"
iPhone 3GS      480x320   480x320    1x     480x320           163   3:2     3.5"

Роздільна здатність iPhone


3
Красива і проста відповідь. Дякую Лешеку.
SJ Lim

46

Напевно, ви повинні припинити використання зображень запуску в iOS 8 і використовувати розкадровку або nib / xib.

  • У Xcode 6 відкрийте Fileменю та виберіть NewFile...iOSUser InterfaceLaunch Screen.

  • Потім відкрийте налаштування свого проекту, натиснувши на нього.

  • У Generalзакладці, в розділі під назвою App Icons and Launch Imagesвстановіть Launch Screen Fileна файли , які ви тільки що створили (це буде встановлено UILaunchStoryboardNameв info.plist).

Зверніть увагу, що на даний момент тренажер покаже лише чорний екран, тому вам потрібно протестувати на реальному пристрої .

Додавання файлу xib Launch Screen до проекту:

Додавання нового файлу xib Launch Screen

Налаштування проекту для використання файлу xib Launch Screen замість каталогу активів:

Налаштуйте проект для використання xob Launch Screen xob


1
Майже досконалі інструкції, але це має бути Файл -> НОВО -> Файл ... тощо. Щоб знайти другий файл, знадобився час :) Дякуємо за допомогу!
Буде

Як ви робите це добре? Коли я намагаюся поставити зображення, воно стає дуже непростим.
badweasel

Якщо ви не просто відображаєте зображення, а хочете показати інтерфейс користувача для завантаження, це гарна ідея, оскільки зображення все одно має бути відповідного розміру, незалежно від того, було воно в розкадровці чи ні. Так само, якщо ви можете намалювати зображення в коді, то, можливо, ви можете обійти.
AppHandwerker

Ви все ще повинні надати файли зображень, якщо ви підтримуєте що-небудь до iOS 8, оскільки запуски xibs не сумісні назад.
Марк Брідж

24

На фізичному пристрої межі головного екрана iPhone 6 Plus - 2208x1242, а nativeBounds - 1920x1080 . Для зміни розміру до фізичного дисплея передбачено масштабне обладнання.

На тренажері межі головного екрана iPhone 6 Plus та натільні межі розміром 2208x1242.

Іншими словами ... Відео, OpenGL та інші речі, засновані на роботі CALayersз пікселями, матимуть справу з реальним буфером кадрів 1920x1080 на пристрої (або 2208x1242 на SIM). Речі, що стосуються моментів UIKit, стосуються меж 2208x1242 (x3) та будуть масштабуватися відповідно до пристрою.

Симулятор не має доступу до того ж обладнання, яке проводить масштабування на пристрої, і не дуже багато користі від моделювання цього програмного забезпечення, оскільки вони дадуть інші результати, ніж апаратні засоби. Таким чином, має сенс встановити nativeBoundsголовний екран імітованого пристрою в межах основного екрану фізичного пристрою.

iOS 8 додав API до UIScreen( nativeScaleі nativeBounds), щоб дозволити розробнику визначити дозвіл CADisplayвідповідного UIScreen.


13

Для таких, як я, хто цікавиться, як трактуються застарілі програми, я трохи тестував та обчислював цю тему.

Завдяки підказці @ hannes-sverrisson, я почав виходити з припущення, що застарілий додаток обробляється переглядом 320x568 в iPhone 6 та iPhone 6 plus.

Тест робився з простим чорним фоном bg@2x.pngз білою облямівкою. Фон має розмір 640x1136 пікселів, і він чорний з внутрішньою білою облямівкою в 1 піксель.

Нижче наведені скріншоти, надані тренажером:

На скріншоті iPhone 6 ми бачимо 1 піксельну межу вгорі та внизу білої рамки та 2-піксельну межу на екрані iPhone 6 plus. Це дає нам використаний простір 1242x2204 на iPhone 6 plus, а не 1242x2208 та 750x1332 на iPhone 6, а не 750x1334.

Можна припустити, що ці мертві пікселі мають поважати співвідношення сторін 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

По-друге, важливо знати, що @ 2x ресурси будуть масштабуватися не тільки на iPhone 6 плюс (що очікує @ 3x активів), але і на iPhone 6. Це, мабуть, тому, що не масштабування ресурсів призвело б до несподіваних макетів, через до розширення погляду.

Однак масштабування не є рівнозначним за шириною та висотою. Я спробував це з ресурсом 264x264 @ 2x. З огляду на результати, я маю припустити, що масштабування прямо пропорційне співвідношенню пікселів / балів.

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

Важливо відзначити, що масштабування iPhone 6 не однакове за шириною та висотою (309x310). Це, як правило, підтверджує вищезгадану теорію, що масштабування не пропорційне по ширині та висоті, але використовує співвідношення пікселів / точок.

Я сподіваюся, що це допомагає.


12

Перевірте цю інфографіку: http://www.paintcodeapp.com/news/iphone-6-screens-demystified

Це пояснює відмінності між старими iPhone, iPhone 6 та iPhone 6 Plus. Ви можете побачити порівняння розмірів екрана в точках, візуалізованих пікселів та фізичних пікселів. Там же ви знайдете відповідь на своє запитання:

iPhone 6 Plus - із дисплеєм Retina HD. Коефіцієнт масштабування становить 3, а потім зображення зменшується з відтворених 2208 × 1242 пікселів до 1920 × 1080 пікселів.

Коефіцієнт зменшення масштабу - 1920/2208 = 1080/1242 = 20 / 23. Це означає, що кожні 23 пікселі від початкового візуалізації повинні бути відображені до 20 фізичних пікселів. Іншими словами, зображення зменшується приблизно до 87% від початкового розміру.

Оновлення:

Існує оновлена ​​версія інфографіки, згадана вище. Він містить більш детальну інформацію про відмінності в роздільній здатності екрана, і він охоплює всі моделі iPhone поки що, включаючи 4-дюймові пристрої.

http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions


Тож навіть якщо вимкнено функцію згладжування, існує необов'язкове антизбудження, яке продовжується при зменшенні масштабу?
Сем,

Якби ця інфографіка включала 4-дюймовий екран, це було б приголомшливо.
Раджеш

@Rajesh Я оновив свою відповідь, перевірте її зараз щодо інформації про 4-дюймові пристрої.
Даррарски

4

Навіть якщо мені взагалі не подобається тон дзеркального блогу Джона Грубера «Джордж Грубер», його більшу сторінку iPhone дисплея варто прочитати.

Він здогадався, але отримав рівномірну роздільну здатність як в точках, так і в пікселях для обох моделей, за винятком того, що він не (і я, ні) не очікував, що Apple створить фізичний дисплей меншої роздільної здатності і зменшить масштаб (деталі - у відповіді @ Tommy).

Суть всього в тому, що слід перестати думати з точки зору пікселів і почати думати з точки зору (це вже досить давно, це не нещодавній винахід) та фізичного розміру елементів інтерфейсу. Коротше кажучи, обидві нові моделі iPhone покращуються в цьому плані, оскільки фізично більшість елементів залишаються однакового розміру, ви можете просто розмістити їх більше на екрані (для кожного більшого екрану ви можете помістити більше).

Я просто трохи розчарований, що вони не зберегли відображення внутрішньої роздільної здатності до фактичної роздільної здатності екрана 1: 1 для більшої моделі.


ми думаємо в балах, але, на жаль, ми маємо створювати зображення у пікселях на Photoshop ... 😃
Качка

2
Пікселі мають значення для багатьох з нас з багатьох причин. У той час як Apple займається власною думкою щодо цієї теми, вони дуже обережно додали [UIScreen nativeBounds] в iOS8.
ctpenrose

Так, пікселі також важливі, але для статичних об'єктів, таких як зображення (бризки екрана тощо). Моя думка (каламбур призначена) була скоріше для макета екрана додатків, речі намальовані динамічно.
сировина
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.