Значки сетчатки (@ 2x) не используются, когда изображения указаны в коде

StackOverflow https://stackoverflow.com/questions/3442239

  •  27-09-2019
  •  | 
  •  

Вопрос

Я размещаю изображение Play.png на мой взгляд. Когда представление первоначально загружается, iPhone 4 захватывает соответствующую плей-файл @2x.png, и он выглядит отлично. Однако, когда я нажимаю кнопку PLAY, мой код отключает его для файла Pause.png. Затем, когда я нажуплею Pause.png, чтобы вернуть Play.png, он использует исходный файл Play.png (не версия @ 2x, как я думал, она автоматически ссылается).

Это код, который я пытался использовать:

[button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];

Итак, если я поменяю файлы после нагрузки на начальный просмотр, я должен вручную указать версию @ 2x внутри anficate? Если это так, - это uescreen.scale лучший атрибут для этого?

В настоящее время я использую код, как это:

if ([UIScreen mainScreen].scale > 1.0) 
{ 
    [button setImage:[UIImage imageNamed:@"play@2x.png"] forState:UIControlStateNormal]; 
} 
else 
{ 
    [button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
}

Это работает нормально, но имея его, если заявление о том, что в нем раздражает и кажется немного хрупким.

Заранее спасибо всем, что вы там.

Это было полезно?

Решение

Я могу подтвердить, что это проблема с устройством 4.0. Проблема не в том, что она не загружается изображение @ 2x, это действительно действительно отображает его на 72 dpi (вызывая размытие).

Эта ошибка к счастью, закреплена в 4.1 (проверено в эмуляторе).

Другие советы

Условное утверждение ненужно. Следующая строка достаточна:

[button setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];

В iOS 4.0 IMAPENAMED: метод автоматически ищет суффикс имени файла «@ 2x», если устройство является iPhone 4 и имеет отображение сетчатки. В предыдущих версиях OS iPhone ImageNaMed: метод только ищет то, что вы пишете (т. Е. Изображение нижнего разрешения). Это работает, потому что iPhone 4 не может иметь более низкую версию ОС, затем 4.0, поэтому ваши пользователи дисплея Retina всегда будут иметь более высокое разрешение.

Вы можете использовать только:

[UIImage imageNamed:@"play"]

Без расширения. Это загрузит версию @ 2x, если доступно, и если устройство имеет масштаб X2.

Это будет работать для iOS4 или терки. Однако, если вы хотите запустить свое приложение в предыдущих версиях, вы можете сделать следующее:

UIImage* image = [UIImage imageNamed:@"play"]; // for iOS 4 or greater
if(!image)
    image = [UIImage imageNamed:@"play.png"]; // for previous iOS versions

Преимущество заключается в том, что это будет работать, если в любой момент у вас есть @ 3x или любая другая версия, если Apple создает новые устройства или отображения.

Вы можете создать метод утилиты, чтобы не делать это везде, где вам нужно загрузить изображение.

Видеть: Поддержка экранов высокого разрешения, Раздел «Загрузка изображений в ваше приложение»

Две глупые ошибки (оба из которых я сделал раньше), что может вызвать эту проблему:

  1. Случайно название небольших версий @ 2x вместо крупных
  2. Наличие больших версий немного распространяться (на один пиксель)

Я столкнулся с такой же проблемой, а затем понял, что мои файлы экспортируемые файлами Windows Photoshop. Видимо, капитализация имеет значение.

Также см Hi-res @ 2x Image не поднят для элемента вкладок

Кто-то на другой нить упомянул, что им удалось решить аналогичную проблему с видом на неприятности, удаляя и повторно добавляя свои изображения HIE-RES в проект.

У меня была подобная проблема из-за имени файла - button_slice9.png и button_slice9@2x.png не работал.

Но button_slice.png и button_slice@2x.png работает, как и ожидалось в ImageNaMed:.

У меня просто была похожая проблема, которая заняла некоторое время, чтобы выяснить. Оказывается, мои изображения @ 2x как-то не были добавлены в цель моего приложения, поэтому они не были упакованы.

У меня была похожая проблема, когда я заменил низкий icon icon-close.png с высоким res icon-close@2x.png. iPad Builds, казалось, проигнорировал «@ 2x» и загрузил изображение при двойном размере со шкалой = 1,0. Удаление файла и добавление спины не помогло. Переименовав его на «icon-leave@2x.png». Некоторая плохая информация кэширована где-то о icon-close.png

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top