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

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

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

кто прав?

Xcode

8 ответов


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

обновлено для новых iPhones X, X и X Max

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

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 x 143.6 mm.

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 мм. При работе в увеличенном режиме, т. е. без новых 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 6С с масштабированием @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 при работе на симуляторе.

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 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 @2х ресурса. Учитывая результаты, я должен предположить, что масштабирование прямо пропорционально отношению пикселей / точек.

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 для более крупной модели.