Дисплей iOS Retina: изображения двойного размера - PullRequest
3 голосов
/ 21 февраля 2012

Для тестирования не / Retina Display я создал UIView размером 100x100.

Я создал 2 изображения: - нормальный размер (100x100) - размер сетчатки (200x200)

У меня есть две ситуации: 1) Отображение без Retina + изображение с нормальным размером в фоновом режиме 2) Отображение Retina + изображение с Retina Size в фоновом режиме

Первый сценарий в порядке.Во втором сценарии изображение имеет двойной размер, и в моем UIView я вижу только 1/4 от общего изображения.

То же самое происходит, когда я пытаюсь назначить фоновое изображение для моей панели навигации UIViewController следующим образом:

if (IS_RETINA()) {
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND_RETINA] forBarMetrics:UIBarMetricsDefault];
}
else {
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault];
}

Ответы [ 3 ]

36 голосов
/ 21 февраля 2012

Есть гораздо более простой способ сделать это.Присвойте версии с сетчатки изображения то же имя, что и у версии без сетчатки, за исключением символа «@ 2x» в конце.Например, если ваше обычное изображение было названо foo.png, тогда версия сетчатки должна иметь имя foo@2x.png.

Затем просто обратитесь к обычной версии имени файла (например, foo.png).раз.Когда ваше приложение работает на оборудовании, отличном от Retina, будет использоваться обычное изображение, но всякий раз, когда вы используете оборудование Retina, изображение с более высоким разрешением будет использоваться автоматически.Это проще, чем писать оператор if для каждого изображения, которое вы используете, плюс оно действительно будет работать.

2 голосов
/ 21 февраля 2012

Вам не нужно кодировать тест IS_RETINA, просто добавьте суффикс @ 2x к имени файла, содержащего изображение, которое вы хотите использовать для отображения на сетчатке, и iOS автоматически использует его в предпочтениях.

Связывают 2 файла изображений, prettyNavBarBackground.png и prettyNavBarBackground@2x.png

#define IMG_NAVIGATION_BAR_BACKGROUND prettyNavBarBackground

Тогда вы можете просто использовать этот единственный вызов, и iOS выберет соответствующую опцию

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault];
0 голосов
/ 31 марта 2015

Вам не нужно писать какой-либо искомый код, чтобы различать сетчатку и обычное оборудование.Вам просто нужно добавить изображение "@ 2x".Это будет отлично работать, как идеально.

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

...