Поддержка разрешения изображения для iPhone 3G, iPhone 4 и iPhone 5

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

Я создаю приложение, которое должно работать на iPhone 3G, iPhone 4 и iPhone 5.

Я новичок в разработке iOS, и до сих пор я написал большой объем кода пользовательского интерфейса, который просто работает на iPhone Simulator. Я сосредоточился на общем языке и функциях SDK, чтобы узнать об общей разработке iOS, и поэтому в основном игнорировал любую поддержку разрешения, кроме того, что мне предоставляет Simulator.

Теперь я столкнулся с требованием переносимости между этими разными версиями iPhone, и я очень смущен. Прежде всего позвольте мне рассказать, что я знаю о деталях поддержки экранов iPhone 3 и iPhone 4, и, пожалуйста, поправьте меня, если я сделал что-то не так (полностью игнорируя iPhone 5, на данный момент):

  1. Система предполагает зону просмотра на основе 320x480 ТОЧЕК. В iPhone 3 фактический размер экрана такой же, но в iPhone 4 используется фактический экран размером 640x960 пикселей.

  2. Мы кодируем и генерируем наши представления в соответствии с размером 320x480. Мы предоставляем изображение с нормальным разрешением (например, размером 100x100 some_image.png) и версию с высоким разрешением с суффиксом "@ 2x". (200x200 -размер [email protected]) оба в одном наборе приложений.

  3. При вызове UIKit методов загрузки изображений, например методов UIImage или UIImageView, система выбирает правильную версию наших изображений и загружает их в соответствии с текущим устройством (iPhone 3 или iPhone 4).

До сих пор я осторожно предлагал эти три шага для поддержки iPhone 3G и iPhone 4 с низким и высоким разрешением.

Допустим, у меня есть изображение размером 100x100, которое я собираюсь использовать в UIImage объектах. Я также предоставляю версию с высоким разрешением 200x200 и думаю, что она будет работать как на iPhone 4, так и на iPhone 5 с суффиксом "@ 2x".

Но предположим, что у меня есть фоновое изображение размером 320 x 480, покрывающее весь фон, и я предоставляю версию 640 x 960 с суффиксом "@ 2x". также.

Но что будет с экраном iPhone 5 размером 640x1136? Должен ли я подготовить изображение с разрешением iPhone5 и загрузить его в if(IPHONE5 == true) условном виде?

Как правильно с этим справиться?


person Ufuk Can Bicici    schedule 25.12.2012    source источник


Ответы (1)


Вам необходимо решить несколько проблем:

  1. «полноэкранное» / фоновое изображение / другое изображение, которое должно соответствовать соотношению сторон экрана.
  2. изображения, не зависящие от соотношения сторон экрана

В случае №1 вы захотите предоставить одно и то же / похожее изображение с разным разрешением. Один, который подходит для устройств с разрешением 320x480 пикселей, один для дисплея Retina (640x960 пикселей) с @ 2x, а третий - для дисплея iPhone 5 (и, возможно, отдельные изображения iPad, если это универсальное приложение).

К сожалению, iOS не предоставляет ничего подобного @ 2x для дисплеев iPhone 5. Похоже, что общее соглашение включает @ 568h в имя файла, но это НЕ используется автоматически iOS. Решение состоит в том, чтобы определить, является ли дисплей iPhone и является ли он более высоким. Следующий фрагмент кода позволит вам это сделать:

// Is it an iPhone with the tall screen?
if ([[ UIScreen mainScreen ] bounds ].size.height == 568.))

    // use the tall image
    image = [UIImage imageNamed:@"[email protected]"

else {

    // use 'default' image (will use [email protected] if iPhone retina, 
    // myImage~ipad.png if iPad, [email protected] if iPad retina)
    image = [UIImage imageNamed:@"myImage.png"
}

Для № 2, поскольку вы, вероятно, хотите, чтобы размер 100 x 100 пикселей отображался в виде квадрата на всех устройствах, вы можете предоставить только изображения размером 100 x 100 пикселей и 200 x 200 пикселей, причем последнее имеет @ 2x в имени файла.

person bobnoble    schedule 25.12.2012
comment
Спасибо за ответ. Кажется, нам нужно хранить 3 разных версии изображений, зависящих от соотношения сторон. Не вызовет ли это нагрузки на память, если наше приложение использует много разных представлений с разным фоном? - person Ufuk Can Bicici; 26.12.2012
comment
Пакет приложений / apk-файл будет больше (и будет загружаться больше), что потребует больше места на устройстве. Во время выполнения он загрузит в память только одно из изображений. Если в разных представлениях с разным фоном только видимые представления требуют, чтобы их фоновое изображение было загружено в память, и iOS обычно выгружает изображения, которые ему не нужны, когда ресурсы истощаются. - person bobnoble; 26.12.2012