Универсальное приложение iPad / iPhone для именования изображений? - PullRequest
14 голосов
/ 28 октября 2010

В моем приложении мне нужно получить правильное изображение на основе устройства iPad / iPhone 4 / iPhone 3.

Например:

У меня есть изображение с именем a.png (ширина 40, высота 20) для iPhone 3 / iPod и a@2x.png (ширина 80, высота 40) для iPhone 4.

Если бы я упомянул код

UIImage *myImage=[UIImage imageNamed:@"a.png"];

myImage содержит (80 * 40) изображение, если это iPhone 4. myImage содержит (40 * 20) изображение, если это iPod / iPhone 3.

У меня вопрос, как мне получить изображение для iPad (60 * 30), как указано выше в соглашении об именах.

Я попытался дать a~ipad.png в качестве имени изображения, и оно не работает. Можете ли вы указать, где есть ошибка?

И если я использую условие, используя [UIDevice currentDevice]; isIpod -> load (60 * 30) image в противном случае загрузите изображения для iPhone / iPod, все работает нормально.

Но мне нужно, чтобы оно работало без использования условия и использования соглашения об именах, например a.png для iPhone / iPod, a.@2x.png для iPhone 4 и аналогично для iPad.

Заранее спасибо.

Ответы [ 5 ]

21 голосов
/ 02 сентября 2013

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

enter image description here

С последними устройствами: button@3x~iphone.png и button@3x~ipad.png

18 голосов
/ 19 января 2012

Согласно этому документу Apple, существует соглашение об именовании изображений для устройств:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html#//apple_ref/doc/uid/10000051i-CH7-SW17

В нем говорится, что нужно использовать «~ iphone» для iPhone, а для iPad нет суффикса. Хотя в некоторых случаях мне говорили, что «~ ipad» также работает.

8 голосов
/ 28 октября 2010

Соглашения об именах изображений для iPad не существует, оно предназначено только для дисплеев Retina, поэтому ваши изображения будут выглядеть четкими. Если вы хотите поддерживать iPad, вам нужно создать для него отдельный макет (отдельный xib), в большинстве случаев даже отдельный набор изображений, потому что вы получили более крупный макет.

Однако вы можете создать для себя соглашение об именах и передать имя строки статической функции, которая преобразует имя в iPad / iphone в зависимости от устройства.

например.

[UIImage imageNamed: [MyAppUtils getImageName:@"a.png"]];

и внутри функции getImageName вы можете выполнить преобразование (используйте то же имя, если iphone, иначе переименуйте в другое)

7 голосов
/ 08 сентября 2012

В дополнение к сообщению Нейта, конкретную документацию Apple, описывающую соглашение об именах, можно найти по адресу:

Поддержка экранов с высоким разрешением - обновление файлов с изображениями

Согласно ссылке, шаблон соглашения об именах выглядит следующим образом:

  • Стандарт: <ImageName><device_modifier>.<filename_extension>
  • Высокое разрешение: <ImageName>@2x<device_modifier>.<filename_extension>

Например: «MyImage@2x~ipad.png» для изображения для iPad с высоким разрешением или «MyImage ~ iphone.png» для изображения для iPhone со стандартным разрешением.

0 голосов
/ 28 октября 2010

Я использую «Диспетчер ресурсов», который я разработал перед созданием любого приложения.Этот менеджер ресурсов может принять решение о соглашении об именах после загрузки файлов конфигурации ресурсов (в основном, XML).Таким образом, все понятно для программиста графического интерфейса, вам нужно только беспокоиться о создании контента:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...