Беспорядок разрешения iPhone 6 Plus: Xcode или сайт Apple? для развития

251

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

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

Кто прав?

Изображение 421

  • 0
    Образы для запуска iPhone 6+ должны быть 1242x2208 и 2208x1242. По крайней мере, это заставляет приложения работать должным образом в симуляторе (и это задокументировано в HIG). Я не понял, почему это отличается от предполагаемого физического размера экрана 1920x1080.
  • 2
    очень странное несоответствие.
Показать ещё 4 комментария
Теги:
xcode
ios-simulator
iphone-6-plus
iphone-6

8 ответов

286
Лучший ответ

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 пикселя по вертикали, чтобы хорошо масштабировать.

  • 6
    Как вы рассчитали его -> «виртуальное разрешение 2208 × 1242 (с 736x414 точками)», и это «требует примерно @ 2,46x активов». Что получит UIScreen mainScreen] .bounds.size.height для 6+? 568, 568 * 3 (1704) или 1920.
  • 1
    Возможно добавить примечание к этому ответу об изображениях запуска? (см. ответ Ханнеса) Полезно помнить об обновлении существующих приложений (в противном случае оно работает с разрешением 320x576 @ 3x - я был немного сбит с толку!)
Показать ещё 12 комментариев
111

Ответ: старые приложения работают в режиме 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 при работе на симуляторе.

Изображение 5659

  • 3
    Я полагаю, вы не добавили новые версии образа запуска. Вероятно, поэтому приложение работает в «режиме совместимости», а границы экрана - старые 320x576 на обоих устройствах.
  • 3
    Как только вы добавите новые размеры изображения запуска, вы получите правильные (логические) размеры экрана: 375x667 для iPhone 6 и 414x736 для 6+.
Показать ещё 10 комментариев
85

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

Изображение 5660

  • 2
    Красивый и простой ответ. Спасибо Лешек.
44

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

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

  • Затем откройте настройки для своего проекта, щелкнув по нему.

  • На вкладке General в разделе App Icons and Launch Images установите Launch Screen File только что созданные файлы (это установит UILaunchStoryboardName в info.plist).

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

Добавление файла xib экрана запуска в проект:

Изображение 5661

Настройка вашего проекта на использование xib файла Launch Screen вместо каталога Asset:

Изображение 5662

  • 1
    Практически идеальные инструкции, но это должен быть Файл -> НОВЫЙ -> Файл ... и т. Д. Потребовалось время, чтобы найти второй файл :) Спасибо за помощь!
  • 0
    Как вы делаете это хорошо выглядеть? Когда я пытаюсь нанести на него изображение, оно становится очень шатким.
Показать ещё 2 комментария
25

На физическом устройстве основные ограничения экрана 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.

12

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

Благодаря подсказке @hannes-sverrisson я начал с предположения, что устаревшее приложение обрабатывается с разрешением 320x568 в iPhone 6 и iPhone 6 плюс.

Тест проводился с простым черным фоном [email protected] с белой рамкой. Фон имеет размер 640x1136 пикселей, а черный - с внутренней белой границей 1 пикселя.

Ниже приведены скриншоты, предоставленные симулятором:

На скриншоте iPhone 6 мы видим краю пикселов размером 1 &nbsp в верхней и нижней частях белой границы и 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). Это, как правило, подтверждает приведенную выше теорию о том, что масштабирование не пропорционально по ширине и высоте, но использует соотношение пикселей/точек.

Надеюсь, это поможет.

12

Посмотрите эту информацию: 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

  • 0
    Таким образом, даже если сглаживание отключено, существует ли необязательное сглаживание, которое происходит при уменьшении масштаба?
  • 0
    Если бы эта инфографика включала 4-дюймовый экран, это было бы здорово.
Показать ещё 1 комментарий
4

Даже если мне вообще не нравится тон блога Джона Грубера Daring Fireball, его "Большая гипотеза для iPhone" стоит того, чтобы читать.

Он догадался, но получил ровно право как разрешения в точках, так и в пикселях для обеих моделей, за исключением того, что он не (я тоже) не ожидаю, что Apple построит физический дисплей меньшего разрешения и уменьшит масштаб ( детали находятся в ответе @Tommy).

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

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

  • 2
    Пиксели имеют значение для многих из нас по многим причинам. В то время как Apple по-своему следит за этой темой, они неохотно добавили [UIScreen nativeBounds] в iOS8 по очень веским причинам.
  • 0
    Да, пиксели также важны, но для статических ресурсов, таких как изображения (заставки и тому подобное). Моя точка зрения (каламбур) была скорее для макета экрана приложения, вещи нарисованы динамически.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню