Веб-сайт 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 pt текст выглядит одинаково на экране.
Итак, да, экраны запуска должны быть такого размера.
6, 5, 5, 4 и 4 - все 326 пикселей на дюйм и используют активы @2x, чтобы придерживаться примерно 160 точек на дюйм всех предыдущих устройств.
6+ - 401 пиксель на дюйм. Таким образом, гипотетически понадобится примерно 2,4,6x активов. Вместо этого Apple использует активы @3x и масштабирует весь объем производства примерно до 84% от его натурального размера.
На практике Apple решила пойти с более чем 87%, превратив 1080 в 1242. Несомненно, это должно было найти что-то как можно ближе до 84%, которое все еще создавало цельные размеры в обоих направлениях - 1242/1080 = 2208/1920, тогда как если бы вы превратили 1080 в, скажем, 1286, вам нужно было бы отображать 2286,22 пикселя по вертикали, чтобы хорошо масштабировать.
Ответ: старые приложения работают в режиме 2208 x 1242 Zoomed. Но когда приложение создано для новых телефонов, доступны следующие разрешения: 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 X с масштабированием @3x (название Apple: Super Retina HD), координатное пространство: 375 x 812 и < сильные > 1125 x 2436 пикселей, 458 ppi, физический размер устройства 2,79 x 5,65 дюйма или 70,9 x 143,6 мм <мм..
Размер для 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 х 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 mm. При запуске в режиме Zoomed, то есть без новых 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, даже если он не работает в режиме Zoomed, но он покажет масштаб 3,0 при работе на симуляторе.
Реальное/физическое разрешение iPhone 6 Plus составляет 1920x1080, но в Xcode вы создаете свой интерфейс для разрешения 2208x1242 (736x414 точек), а на устройстве он автоматически уменьшается до 1920x1080 пикселей.
Решения iPhone для быстрого доступа:
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"
Вероятно, вам следует прекратить использование изображений запуска в 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 экрана запуска в проект:
Настройка вашего проекта на использование xib файла Launch Screen вместо каталога Asset:
На физическом устройстве основные ограничения экрана 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
.
Посмотрите эту информацию: 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% от его первоначального размера.
Update:
Существует обновленная версия инфографики, упомянутая выше. Он содержит более подробную информацию о различиях в разрешении экрана и охватывает все модели iPhone до сих пор, включая 4-дюймовые устройства.
http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
Для таких, как я, которые задаются вопросом, как обрабатываются устаревшие приложения, я немного тестировал и вычислял эту тему.
Благодаря подсказке @hannes-sverrisson я начал с предположения, что устаревшее приложение обрабатывается с разрешением 320x568 в iPhone 6 и iPhone 6 плюс.
Тест проводился с простым черным фоном [email protected]
с белой рамкой. Фон имеет размер 640x1136 пикселей, а черный - с внутренней белой границей 1 пикселя.
Ниже приведены скриншоты, предоставленные симулятором:
На скриншоте iPhone 6 мы видим краю пикселов размером 1   в верхней и нижней частях белой границы и 2 пикселя на iPhone 6 плюс скриншот. Это дает нам использованное пространство 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). Это, как правило, подтверждает приведенную выше теорию о том, что масштабирование не пропорционально по ширине и высоте, но использует соотношение пикселей/точек.
Надеюсь, это поможет.
Даже если мне вообще не нравится тон блога Джона Грубера Daring Fireball, его "Большая гипотеза для iPhone" стоит того, чтобы читать.
Он догадался, но получил ровно право как разрешения в точках, так и в пикселях для обеих моделей, за исключением того, что он не (я тоже) не ожидаю, что Apple построит физический дисплей меньшего разрешения и уменьшит масштаб ( детали находятся в ответе @Tommy).
Суть всего в том, что следует перестать думать о пикселях и начать думать с точки зрения точек (это было довольно долгое время, это не недавнее изобретение) и в результате физического размера элементов пользовательского интерфейса. Короче говоря, обе новые модели iPhone улучшаются в этом отношении, так как физически большинство элементов остаются одного размера, вы можете просто разместить их на экране (для каждого большего экрана вы можете поместиться больше).
Я просто немного разочарован тем, что не сохранил отображение внутреннего разрешения на фактическое разрешение экрана 1:1 для большей модели.