2 декабря 2010 г.

Поддержка Retina-display в приложении

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

- Перерисовать все изображения которые вы используете в качестве ресурсов
- Добавить иконку приложения в высоком разрешении
- Если вы используете векторную графику фраемворков Core Graphics или UIKit, то можете улучшить детализацию, смотри “Updating Your Custom Drawing Code
- Если вы используете Core Animation, то возможно вам понадобится изменить параметры маштабирования перед отрисовкой слоев “Accounting for Scale Factors in Core Animation Layers.
- Если вы используете Open GL ES для рисования, то для отрисовки в высоком разрешении вам понадобится маштабирование вашего слоя, как описано в “Drawing High-Resolution Content Using OpenGL ES.
- Если вы создаете изображения программно, то понадобится изменить код создания изображения, как описано в “Creating High-Resolution Bitmap Images Programmatically.”

Для начала опишу первые два способа.

Допустим у вас уже есть изображения оптимизированные под стандартное разрешение и под retina-display. Как же нам из программы узнать какое изображение загрузить? Ответ прост: программисту можно не знать на каком устройстве запущенно приложение. iOS может может сама выбрать нужное изображение в зависимости от устройства, на котором запущенна программа. Изображение только нужно назвать в соответствии с форматом:

- для стандартного резрешения iPhone/iPod Touch файл ресурса изображения должен иметь вид: <ImageName><device_modifier>.<filename_extension>
- для высокого (retina) разрешения: <ImageName>@2x<device_modifier>.<filename_extension>

где, ImageName - имя изображения, filename_extension - расширение, device_modifier - необязательный параметр, который указывает тип устройства для которого сделан ресурс (может быть "~iphone" и "~ipad").

Так например, если у вас ресурс для стандартного разрешения iPhone называется "image.png", то для iPhone 4 должен быть ресурс под названием "image@2x.png", если iOS его не находит, то берется ресурс для стандартного разрешения ("image.png").

так, читаем ресурс:

  1. UIImage* anImage = [UIImage imageNamed:@"image.png"];


кстати, с прошивки iOS 4.0, расширение ресурса (".png") можно не указывать, но я советую оставлять для совместимости с iPhoneOS 3.x.


Теперь о иконках приложения

С версии iOS 3.2 в файле Info.plist приложения появилась возможность задавать массив файлов иконок приложения в параметре CFBundleIconFiles (не путайте с CFBundleIconFile). В этом массиве можно перечислить список файлов иконок с разным разрешением, и система сама подберет оптимальную иконку для устройства на котором запущено приложение.

Список разрешений иконок приложения:
57х57 иконка для iPhone и iPod Touch стандартного разрешения экрана
114х114 (@2x)иконка для iPhone и iPod Touch с retina экраном
72х72iPad иконка
29х29иконка для iPhone и iPod Touch стандартного разрешения экрана, которая отображается в приложении Settings и при поиске
58х58 (@2x)иконка для iPhone и iPod Touch с retina экраном, которая отображается в приложении Settings и при поиске
50х50iPad иконка приложения в результатах поиска


По материалам "Supporting High-Resolution Screens"

2 комментария:

  1. в каком разрешении и размере нужно сохранять png файл для tabbar retina?

    ОтветитьУдалить
    Ответы
    1. Иконки на TabBar автоматически центруются, так что вам не нужно заботится о прозрачном фоне по бокам изображения, так что там может быть и картинка 5х5 пикселей в зависимости, что вы хотите на ней изобразить.
      Но не делайте изображение больше 60х60 так как есть вероятность, что будет вылазить за границы таббара.

      Удалить