Веб-сайт Apple стверджує, що роздільна здатність дорівнює 1080p: 1920 x 1080
Однак екран запуску, необхідний для Xcode (8,0 GM запущено сьогодні), становить 2208 x 1242.
Хто прав?
Веб-сайт Apple стверджує, що роздільна здатність дорівнює 1080p: 1920 x 1080
Однак екран запуску, необхідний для Xcode (8,0 GM запущено сьогодні), становить 2208 x 1242.
Хто прав?
Відповіді:
IPhone 6+ здійснює внутрішнє використання активів @ 3x при віртуальній роздільній здатності 2208 × 1242 (з 736x414 балами), а потім вибірки, які не відображаються для відображення. Так само, як використання масштабованої роздільної здатності на 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 пікселів, щоб добре масштабувати.
[UIScreen mainScreen].bounds.size.height
повертає 736 в тренажері iPhone 6+, коли знаходиться в портреті. Це значення 2208, поділене на шкалу 3. Ширина - 414.
Відповідь полягає в тому, що старіші програми працюють у режимі масштабування 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 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 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"
Напевно, ви повинні припинити використання зображень запуску в iOS 8 і використовувати розкадровку або nib / xib.
У Xcode 6 відкрийте File
меню та виберіть New
⟶ File...
⟶ iOS
⟶ User Interface
⟶ Launch Screen
.
Потім відкрийте налаштування свого проекту, натиснувши на нього.
У General
закладці, в розділі під назвою App Icons and Launch Images
встановіть Launch Screen File
на файли , які ви тільки що створили (це буде встановлено UILaunchStoryboardName
в info.plist
).
Зверніть увагу, що на даний момент тренажер покаже лише чорний екран, тому вам потрібно протестувати на реальному пристрої .
Додавання файлу xib Launch Screen до проекту:
Налаштування проекту для використання файлу xib Launch Screen замість каталогу активів:
На фізичному пристрої межі головного екрана 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
.
Для таких, як я, хто цікавиться, як трактуються застарілі програми, я трохи тестував та обчислював цю тему.
Завдяки підказці @ 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). Це, як правило, підтверджує вищезгадану теорію, що масштабування не пропорційне по ширині та висоті, але використовує співвідношення пікселів / точок.
Я сподіваюся, що це допомагає.
Перевірте цю інфографіку: 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
Навіть якщо мені взагалі не подобається тон дзеркального блогу Джона Грубера «Джордж Грубер», його більшу сторінку iPhone дисплея варто прочитати.
Він здогадався, але отримав рівномірну роздільну здатність як в точках, так і в пікселях для обох моделей, за винятком того, що він не (і я, ні) не очікував, що Apple створить фізичний дисплей меншої роздільної здатності і зменшить масштаб (деталі - у відповіді @ Tommy).
Суть всього в тому, що слід перестати думати з точки зору пікселів і почати думати з точки зору (це вже досить давно, це не нещодавній винахід) та фізичного розміру елементів інтерфейсу. Коротше кажучи, обидві нові моделі iPhone покращуються в цьому плані, оскільки фізично більшість елементів залишаються однакового розміру, ви можете просто розмістити їх більше на екрані (для кожного більшого екрану ви можете помістити більше).
Я просто трохи розчарований, що вони не зберегли відображення внутрішньої роздільної здатності до фактичної роздільної здатності екрана 1: 1 для більшої моделі.