Сайт 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 точками), а затем сэмплирует их для отображения. То же самое, что и использование масштабированного разрешения на MacBook Retina - оно позволяет им получить целое кратное для пиксельных активов, при этом, например, текст размером 12 пт выглядит одинаково по размеру на экране.
Так что, да, экраны запуска должны быть такого размера.
6, 5, 5, 4 и 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 точек на дюйм, физический размер устройства составляет 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-дюймовый жидкокристаллический дисплей Retina 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 x 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 x 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 x 4,8 дюйма или 68 x 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 и nativeBounds равны 2208x1242.
Другими словами ... Видео, OpenGL и другие вещи, основанные на CALayers
пикселях, будут иметь дело с реальным буфером кадров 1920x1080 на устройстве (или 2208x1242 на симе ). Вещи, связанные с точками, 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 плюс вместо 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 plus (который ожидает активы @ 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
Даже если мне вообще не нравится тон в блоге Daring Fireball Джона Грубера, его « Большая гипотеза дисплея iPhone» стоит того, чтобы ее прочитать.
Он догадался , но получил именно право и разрешение в точках и в пикселях для обеих моделей, за исключением того, что он не сделал (я ни) не ожидают , Apple , чтобы строить меньше разрешение физического дисплея и масштабирования вниз (подробности в @ ответ Томми).
Суть всего этого заключается в том, что нужно перестать думать с точки зрения пикселей и начать думать с точки зрения точек (это имело место довольно долгое время, это не недавнее изобретение) и получающегося в результате физического размера элементов пользовательского интерфейса. Короче говоря, обе новые модели iPhone улучшаются в этом отношении, так как физически большинство элементов остаются одинакового размера, вы можете просто разместить больше их на экране (для каждого большего экрана вы можете разместить больше).
Я просто немного разочарован, что они не сохранили отображение внутреннего разрешения на фактическое разрешение экрана 1: 1 для большей модели.