iPhone 6 Plus разрешение путаница: Xcode или веб-сайт Apple? для развития


веб-сайт Apple утверждает, что разрешение 1080p: 1920 x 1080

однако экран запуска, необходимый для Xcode (8.0 GM запущен сегодня), составляет 2208 x 1242.

кто прав?

8 257

8 ответов:

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

Итак, да, экраны запуска должны быть такого размера.

в математика:

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

6+ составляет 401 пикселей на дюйм. Так что это гипотетически нужно примерно @2.46 X активов. Вместо этого Apple использует активы @3x и масштабирует полный объем производства примерно до 84% от его естественного размера.

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

ответ заключается в том, что старые приложения работают в режиме масштабирования 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 X, X и X Max

размер iPhone X Max С @3x масштабирование (имя Apple:Super Retina HD 6.5 display"), координатное пространство: 414 x 896 очки и 1242 x 2688 пикселов 458 точек на дюйм, физический размер устройства составляет 3.05 х 6.20 или 77.4 х 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 х 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

enter image description here

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

Comparing iPhone 6 and 6 Plus

реальное / физическое разрешение 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"

iPhone resolutions

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

  • на Xcode 6 открыть File меню и выберите NewFile...iOSUser InterfaceLaunch Screen.

  • открыть настройки для вашего проекта, нажав на нее.
  • на General tab, в разделе под названием App Icons and Launch Images, выберите Launch Screen File в файлы, которые вы только создано (это будет установить UILaunchStoryboardName на info.plist).

обратите внимание, что в настоящее время симулятор будет показывать только черный экран, поэтому вам нужно тест на реальном устройстве.

добавление файла xib стартового экрана в ваш проект:

Adding a new Launch Screen xib file

настройка проекта для использования файла xib стартового экрана вместо каталога активов:

Configure project to use Launch Screen xob

на физическом устройстве границы главного экрана iPhone 6 Plus - 2208x1242 а nativeBounds это 1920x1080. Для изменения размера физического дисплея используется аппаратное масштабирование.

на симуляторе границы главного экрана iPhone 6 Plus и nativeBounds-это 2208x1242.

другими словами... Видео, OpenGL, и другие вещи, основанные на CALayers что дело с пикселями будет иметь дело с настоящий 1920x1080 буфер кадров на устройстве (или 2208x1242 на sim). Вещи, имеющие дело с точками в 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% от его первоначального размера.

обновление:

существует обновленная версия инфографики, упомянутая выше. Он содержит более подробную информацию о различиях разрешения экрана и его охватывает все модели iPhone, включая 4-дюймовых устройств.

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

для таких, как я, кто задается вопросом, как обрабатываются устаревшие приложения, я сделал немного тестирования и вычислений по этому вопросу.

благодаря подсказке @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 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's).

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

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