iPhone 6 Plus разрешение путаница: Xcode или веб-сайт Apple? для развития
веб-сайт Apple утверждает, что разрешение 1080p: 1920 x 1080
однако экран запуска, необходимый для Xcode (8.0 GM запущен сегодня), составляет 2208 x 1242.
кто прав?
8 ответов:
iPhone 6 + делает внутренне с помощью @3x активы с виртуальным разрешением 2208×1242 (С 736x414 точки), затем образцы, которые вниз для отображения. То же самое, что и при использовании масштабированного разрешения на 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
размер 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 при запуске на симуляторе.
реальное / физическое разрешение 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
tab, в разделе под названиемApp Icons and Launch Images
, выберитеLaunch Screen File
в файлы, которые вы только создано (это будет установитьUILaunchStoryboardName
наinfo.plist
).обратите внимание, что в настоящее время симулятор будет показывать только черный экран, поэтому вам нужно тест на реальном устройстве.
добавление файла xib стартового экрана в ваш проект:
настройка проекта для использования файла xib стартового экрана вместо каталога активов:
на физическом устройстве границы главного экрана 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 5:http://i.stack.imgur.com/b2E5K.png
- симулятор iPhone 6:http://i.stack.imgur.com/4Qz8N.png
- симулятор iPhone 6 plus:http://i.stack.imgur.com/hQisc.png
на скриншоте 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 для большей модели.