Поддержка экранов с высокой разрешающей способностью в представлениях
Приложения, созданные против iOS SDK 4.0 и более поздней потребности, которая будет подготовлена работать на устройствах с различными разрешениями экранов. К счастью, iOS делает поддерживающие многократные разрешения экранов простыми. Большая часть работы обработки различных типов экранов выполнена для Вас системными платформами. Однако Ваше приложение все еще должно выполнить некоторую работу для обновления основанных на растре изображений, и в зависимости от приложения можно хотеть выполнить дополнительную работу для использования в своих интересах дополнительных пикселей, доступных Вам.
Посмотрите Точки По сравнению с Пикселями для важной справочной информации, связанной с этой темой.
Контрольный список для поддержки экранов с высокой разрешающей способностью
Для обновления приложений для устройств с экранами с высокой разрешающей способностью необходимо сделать следующее:
Обеспечьте изображение с высокой разрешающей способностью для каждого ресурса изображения в Вашем комплекте приложений, как описано в Обновлении Ваших Файлов ресурсов Изображения.
Обеспечьте приложение с высокой разрешающей способностью и значки документа, как описано в Обновлении Значков Вашего Приложения и Изображений Запуска.
Для основанных на векторе форм и содержания, продолжайте использовать свою пользовательскую Базовую Графику и код для прорисовки UIKit как прежде. Если Вы хотите добавить дополнительную подробность к своему нарисованному содержанию, посмотрите Точки По сравнению с Пикселями для получения информации о том, как сделать так.
Если Вы используете OpenGL ES для рисования, решаете, хотите ли Вы выбрать в к получению с высокой разрешающей способностью и установить масштабный коэффициент Вашего уровня соответственно, как описано в Рисовании Содержания С высокой разрешающей способностью Используя OpenGL ES или GLKit.
Для пользовательских изображений, которые Вы создаете, измените свой код создания изображений для принятия во внимание текущего масштабного коэффициента, как описано в Рисовании для Побитового отображения Контекстов PDF и Контекстов.
Если Ваше использование приложения Базовая Анимация, скорректируйте свой код по мере необходимости для компенсации масштабные коэффициенты, как описано в Учете Масштабных коэффициентов в Базовых Слоях анимации.
Рисование улучшений, которые Вы получаете бесплатно
Технологии получения в iOS предоставляют большую поддержку, чтобы помочь Вам сделать свое представленное довольное взглядом хороший независимо от разрешения базового экрана:
Стандартные представления UIKit (текстовые представления, кнопки, табличные представления, и т.д.) автоматически представляют правильно в любом разрешении.
Основанное на векторе содержание (
UIBezierPath
,CGPathRef
, PDF), автоматически использует в своих интересах любые дополнительные пиксели для рендеринга более резких строк для форм.Текст автоматически представляется в более высоких разрешениях.
UIKit поддерживает автоматическую загрузку вариантов с высокой разрешающей способностью (
@2x
) из Ваших изображений.
Если Ваше приложение использует только собственные технологии получения для своего рендеринга, единственная вещь, которую необходимо сделать для поддержки экранов более высокого разрешения, обеспечивают версии с высокой разрешающей способностью изображений.
Обновление файлов ресурсов изображения
Приложения, работающие в iOS 4, должны теперь включать два отдельных файла для каждого ресурса изображения. Один файл обеспечивает версию стандартного разрешения данного изображения, и второе обеспечивает версию с высокой разрешающей способностью того же изображения. Соглашения о присвоении имен для каждой пары файлов образа следующие:
Стандарт: <ImageName> <device_modifier>
.
<filename_extension>Высокое разрешение: <ImageName>
@2x
<device_modifier>.
<filename_extension>
<ImageName> и <filename_extension> части каждого имени указывают обычное имя и расширение для файла. <device_modifier> часть является дополнительной и содержит любого строка ~ipad
или ~iphone
. Когда Вы хотите указать различные версии изображения для iPad и iPhone, Вы включаете один из этих модификаторов. Включение @2x
модификатор для изображения с высокой разрешающей способностью является новым и позволяет системе знать, что изображение является вариантом с высокой разрешающей способностью стандартного изображения.
При создании версий с высокой разрешающей способностью изображений поместите новые версии в то же расположение в комплекте приложений как оригинал.
Загрузка изображений в приложение
UIImage
класс дескрипторы вся работа должна была загрузить изображения с высокой разрешающей способностью в Ваше приложение. При создании новых объектов изображения Вы используете то же имя для запроса и стандарта и версий с высокой разрешающей способностью изображения. Например, если у Вас есть два файла образа, названные Button.png
и Button@2x.png
, Вы использовали бы следующий код для запроса изображения кнопки:
UIImage *anImage = [UIImage imageNamed:@"Button"]; |
На устройствах с экранами с высокой разрешающей способностью, imageNamed:
, imageWithContentsOfFile:
, и initWithContentsOfFile:
методы автоматически ищут версию требуемого изображения с @2x
модификатор на его имя. Если это находит один, это загружает то изображение вместо этого. Если Вы не обеспечиваете версию с высокой разрешающей способностью данного изображения, объект изображения все еще загружает изображение стандартного разрешения (если Вы существуете), и масштабирует его во время получения.
Когда это загружает изображение, a UIImage
возразите автоматически устанавливает size
и scale
свойства к надлежащим значениям на основе суффикса файла образа. Для изображений стандартного разрешения это устанавливает scale
свойство к 1,0 и наборы размер изображения к пиксельным размерностям изображения. Для изображений с @2x
суффикс в имени файла, это устанавливает scale
свойство к 2,0 и половины значения ширины и высоты для компенсации масштабный коэффициент. Эти разделенные на два значения коррелируют правильно к основанным на точке размерностям, которые необходимо использовать в логическом координатном пространстве для рендеринга изображения.
A UIImage
объект автоматически принимает свой масштабный коэффициент во внимание во время получения. Таким образом любой код, который Вы имеете для рендеринга изображений, должен работать то же, пока Вы обеспечиваете ресурсы правильного образа в своем комплекте приложений.
Используя представление изображения для отображения повторных изображений
Если Ваше приложение использует UIImageView
класс для представления повторных изображений для выделения или анимации, всех изображений, которые Вы присваиваете тому представлению, должен использовать тот же масштабный коэффициент. Можно использовать представление изображения, чтобы вывести на экран единственное изображение или анимировать несколько изображений, и можно также обеспечить изображение выделения. Поэтому, если Вы обеспечиваете версии с высокой разрешающей способностью для одного из этих изображений, тогда у всех должны быть версии с высокой разрешающей способностью также.
Обновление значков приложения и изображений запуска
В дополнение к обновлению ресурсов пользовательского изображения Вашего приложения необходимо также обеспечить новые значки с высокой разрешающей способностью для значка приложения и изображений запуска. Процесс для обновления этих ресурсов изображения совпадает с для всех других ресурсов изображения. Создайте новую версию изображения, добавьте @2x
строка модификатора к соответствующему имени файла образа и обработка изображение, поскольку Вы делаете оригинал. Например, для значков приложения, добавьте имя файла образа с высокой разрешающей способностью к CFBundleIconFiles
ключ Вашего приложения Info.plist
файл.
Для получения информации об указании значков и изображений запуска для Вашего приложения, посмотрите Связанные с приложением Ресурсы в Руководстве по программированию Приложения для iOS.
Рисование содержания с высокой разрешающей способностью Используя OpenGL ES или GLKit
Если Ваше приложение использует OpenGL ES или GLKit для рендеринга, Ваш существующий код для прорисовки должен продолжать работать без любых изменений. Когда продвинуто экран с высокой разрешающей способностью, тем не менее, Ваше содержание масштабируется соответственно и будет казаться более глыбовым. Причина глыбового появления состоит в том что поведение по умолчанию CAEAGLLayer
класс, который Вы используете для поддержки OpenGL ES renderbuffers (прямо или косвенно), совпадает с другими Базовыми объектами Слоя анимации. Другими словами, его масштабный коэффициент установлен в 1,0 первоначально, который заставляет Базового наборщика Анимации масштабировать содержание уровня на экранах с высокой разрешающей способностью. Для предотвращения этого глыбового появления необходимо увеличить размер OpenGL ES renderbuffers для соответствия размера экрана. (С большим количеством пикселей можно тогда увеличить сумму подробности, Вы предусматриваете свое содержание.), Поскольку добавление большего количества пикселей к Вашему renderbuffers имеет импликации производительности, тем не менее, необходимо явно выбрать в поддерживать экраны с высокой разрешающей способностью.
Для включения получения с высокой разрешающей способностью необходимо изменить масштабный коэффициент представления, которое Вы используете для представления OpenGL ES или содержание GLKit. Изменение contentScaleFactor
свойство Вашего представления от 1,0 до 2,0 триггеров соответствующее изменение в масштабном коэффициенте базового CAEAGLLayer
объект. renderbufferStorage:fromDrawable:
метод, который Вы используете для привязки расположенного на слое объекта с renderbuffers, вычисляет размер буфера рендеринга путем умножения границ уровня на его масштабный коэффициент. Таким образом удвоение масштабного коэффициента удваивает ширину и высоту получающегося буфера рендеринга, давая Вам больше пикселей для Вашего содержания. После этого, Вам решать для обеспечения содержания для тех дополнительных пикселей.
Перечисление b-1 показывает надлежащий способ связать Ваш расположенный на слое объект с Вашим renderbuffers и получить получающуюся информацию о размере. Если Вы использовали OpenGL шаблон приложений ES для создания кода, то этот шаг уже выполнен для Вас, и единственная вещь, которую необходимо сделать, установлена масштабный коэффициент представления соответственно. Если бы Вы не использовали OpenGL шаблон приложений ES, то необходимо использовать код, подобный этому для получения размера буфера рендеринга. Вы никогда не должны предполагать, что размер буфера рендеринга фиксируется для данного типа устройства.
Перечисление b-1 , Инициализирующее хранение буфера рендеринга и получающее его фактические размерности
GLuint colorRenderbuffer; |
glGenRenderbuffersOES(1, &colorRenderbuffer); |
glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); |
[myContext renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:myEAGLLayer]; |
// Get the renderbuffer size. |
GLint width; |
GLint height; |
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &width); |
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &height); |
Если Вы действительно выбираете в к получению с высокой разрешающей способностью, также необходимо скорректировать модель и активы текстуры приложения соответственно. Например, при работе iPad или на устройстве с высокой разрешающей способностью, Вы могли бы хотеть выбрать большие модели и более подробные текстуры для использования в своих интересах увеличенного числа пикселей. С другой стороны, на iPhone стандартного разрешения, можно продолжать использовать меньшие модели и текстуры.
Важным фактором при определении, поддерживать ли содержание с высокой разрешающей способностью, является производительность. Увеличение вчетверо пикселей, происходящее при изменении масштабного коэффициента уровня с 1,0 до 2,0 оказывает дополнительное давление на процессор фрагмента. Если Ваше приложение выполняет много вычислений на фрагмент, увеличение пикселей может сократить частоту кадров Вашего приложения. Если Вы находите свое выполнение приложения значительно медленнее в более высоком масштабном коэффициенте, рассматриваете одну из следующих опций:
Оптимизируйте свою производительность программы построения теней фрагмента с помощью настраивающих производительность инструкций, найденных в OpenGL Руководство по программированию ES для iOS.
Выберите более простой алгоритм для реализации в программе построения теней фрагмента. Путем выполнения так, Вы сокращаете качество каждого отдельного пикселя для рендеринга полного изображения в более высоком разрешении.
Используйте дробный масштабный коэффициент между 1,0 и 2.0. Масштабный коэффициент 1,5 обеспечивает лучшее качество, чем масштабный коэффициент 1,0, но должен заполнить меньше пикселей, чем изображение, масштабируемое к 2,0.
OpenGL ES в iOS 4 и более поздних предложениях, мультивыбирающих как опция. Даже при том, что Ваше приложение может использовать фактор меньшего масштаба (даже 1.0), реализация, мультивыбирающая так или иначе. Добавленное преимущество состоит в том, что этот метод также обеспечивает более высокое качество на устройствах, не поддерживающих дисплеи с высокой разрешающей способностью.
Лучшее решение зависит от потребностей Вашего OpenGL приложение ES; необходимо протестировать больше чем одну из этих опций и выбрать подход, обеспечивающий лучший баланс между производительностью и качеством изображения.