Поддержка экранов с высокой разрешающей способностью в представлениях

Приложения, созданные против iOS SDK 4.0 и более поздней потребности, которая будет подготовлена работать на устройствах с различными разрешениями экранов. К счастью, iOS делает поддерживающие многократные разрешения экранов простыми. Большая часть работы обработки различных типов экранов выполнена для Вас системными платформами. Однако Ваше приложение все еще должно выполнить некоторую работу для обновления основанных на растре изображений, и в зависимости от приложения можно хотеть выполнить дополнительную работу для использования в своих интересах дополнительных пикселей, доступных Вам.

Посмотрите Точки По сравнению с Пикселями для важной справочной информации, связанной с этой темой.

Контрольный список для поддержки экранов с высокой разрешающей способностью

Для обновления приложений для устройств с экранами с высокой разрешающей способностью необходимо сделать следующее:

Рисование улучшений, которые Вы получаете бесплатно

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

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

Обновление файлов ресурсов изображения

Приложения, работающие в iOS 4, должны теперь включать два отдельных файла для каждого ресурса изображения. Один файл обеспечивает версию стандартного разрешения данного изображения, и второе обеспечивает версию с высокой разрешающей способностью того же изображения. Соглашения о присвоении имен для каждой пары файлов образа следующие:

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