Как добавить изображения для разных размеров экрана из Assets.xcassets в Xcode 8?

Я создаю фоновое изображение разных размеров для экрана входа в систему.
Я ссылаюсь на ссылку Apple https://developer.apple.com/ios/human-interface-guidelines/graphics/launch-screen/
Но я не делаю экран запуска, а просто хочу добавить фон на экран входа.

Я хотел бы знать, что такое 1x , 2x и 3x ?

введите описание изображения здесь


Другая проблема заключается в том, что когда я создаю набор изображений, какой размер изображения следует перетаскивать в какое место. Я понятия не имею об этом. Или нам нужно только 3 изображения (в универсальном ряду)?
А как насчет пейзажного изображения? Куда мне это положить? введите описание изображения здесь


person May Phyu    schedule 16.05.2017    source источник
comment
См. мой ответ на stackoverflow.com/a/52888548/2892357.   -  person Ihar Katkavets    schedule 19.10.2018


Ответы (3)


Я бы создал следующие размеры:

iPhone:

  • @1x — 640 x 1136 (iPhone SE)
  • @2x — 750 x 1334 (iPhone 7, 6S)
  • @3x — 1242 x 2208 (iPhone 7 Plus, iPhone 6S Plus)

iPad:

  • @2x — 2048 x 1536 (iPad Air, Retina iPad 1-го и 2-го поколения / 3-го и 4-го и Pad Mini 2-го и 3-го поколения)
person Rashwan L    schedule 16.05.2017
comment
братан, как насчет iPad, братан? - person May Phyu; 16.05.2017
comment
Братан @RashwanL, ты тоже создавал для Пейзажа? - person May Phyu; 16.05.2017
comment
Для пейзажа это наоборот, скажем, для iPhone 7 @2x портрет это 750 x 1334 и для пейзажа 1334 x 750. Вы поняли? - person Rashwan L; 16.05.2017
comment
Да братан. Но я не знаю, куда тащить. Итак, для портретной версии я должен создать другие активы изображения? - person May Phyu; 16.05.2017
comment
@MayPhyu, я думаю, достаточно просто перетащить их в каталог активов. - person Rashwan L; 16.05.2017
comment
Я имею в виду, что для портретной версии я создаю размер, как вы сказали, и буду перетаскивать (пожалуйста, см. Мое изображение выше). Но для пейзажа я должен создать другие активы изображения? - person May Phyu; 16.05.2017
comment
Да, просто перетащите их в каталог ресурсов, и Xcode автоматически предложит вам лучший вариант. - person Rashwan L; 16.05.2017
comment
Я имею в виду, мне нужно создать еще один набор New Image. не так ли братан? - person May Phyu; 16.05.2017
comment
@MayPhyu, да, ты должен. - person Rashwan L; 16.05.2017
comment
Я уже нажал полезную кнопку. Теперь я нажимаю принять ответ. - person May Phyu; 14.09.2017
comment
Привет, @MayPhyu, ты решил свою проблему? Если да, пришлите мне скриншот этого актива. - person iOS Lifee; 30.01.2018
comment
@RashwanL Поскольку в папке ресурсов доступны только места 1x, 2x и 3x, где должно быть размещено 4-е изображение для iPad в папке ресурсов? - person Md Rais; 28.02.2019

На самом деле, вам нужно кодировать для этого.

Во-первых, вы помещаете изображения в активы отдельно с разными именами.

Во-вторых, используйте следующий код:

    var backgroundImageName = ""
    switch UIScreen.main.bounds.height {
        case 480:
            //for iPhone4s,
            backgroundImageName = "background_iPhone4s"
            break;
        case 568:
            //iPhone SE, iPhone5, iPhone 5s
            backgroundImageName = "background_iPhone5"
            break;
        case 667:
            //iPhone 6, 6s, 7
            backgroundImageName = "background_iPhone6"
            break;
        case 736:
            //iPhone 6 plus, 6s plus, 7 plus
            backgroundImageName = "background_iPhonePlus"
            break;
        default:
            break;
    }
    backgroundImageView.image = UIImage(named: backgroundImageName)
person Yun CHEN    schedule 16.05.2017
comment
Итак, вы создаете 4 изображения? и в каждом активе изображения будет 1x, 2x и 3x? - person May Phyu; 16.05.2017
comment
Да, 4 изображения. Для плюсовых устройств поместите изображение в 3x, оставьте пустым для 2x и 1x. Для других поместите изображение в 2x, оставьте пустым для 3x и 1x. 1x никогда не нужен (старые устройства сейчас очень редки) - person Yun CHEN; 16.05.2017
comment
В порядке. Могу я узнать, какие размеры вы создали, включая ipad? - person May Phyu; 16.05.2017
comment
Для не-ретина iPad высота 512. Retina iPad', 1024. iPad pro 12.9, 1366. Их лучше протестировать на эмуляторе. - person Yun CHEN; 16.05.2017
comment
@YunCHEN, пожалуйста, взгляните на мой ответ stackoverflow.com/a/52888548/2892357 - person Ihar Katkavets; 19.10.2018

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

Также правильно, что на основе коэффициента рендеринга (2x, 3x и т. д.) устройства (например, 2x на 4,7-дюймовых iPhone, как iPhone 8) вам нужно только поместить изображение соответствующего размера в соответствующий Например, для наборов изображений для iPhone 8 требуется только изображение 2x.

Однако имейте в виду следующее:

  • UIScreen.main.bounds.height возвращает высоту логического разрешения, т. е. точек, в отличие от UIScreen.main.nativeBounds.height, который возвращает высоту фактическое разрешение, т.е. пиксели (на самом деле, UIScreen.main.nativeBounds.height всегда возвращает высоту пикселя устройства в портретном режиме, даже если вы находитесь в ландшафтном режиме). Всегда следует использовать изображения, соответствующие фактическому разрешению, т. е. пикселям, даже если вы проверяете точки.

  • Начиная с iOS 8 и более поздних версий UIScreen.main.bounds.height будет возвращать разные значения, независимо от того, находится ли ваше устройство в портретном или ландшафтном режиме. Поэтому, если вы хотите использовать его для различения устройств, вы должны проверить все значения, которые может использовать ваше приложение, и у вас должен быть отдельный набор изображений для каждого.

Например, для приложений, которые работают как в портретном, так и в альбомном режимах:

    var backgroundImageName = ""
    if UIDevice().userInterfaceIdiom == .phone
    {
        switch UIScreen.main.bounds.height
        {
        case 812:   // 5.8" (iPhone X) (3x) (Portrait)
            backgroundImageName = "background_1125x2436"
        case 736:  // 5.5" (iPhone 8+, 7+, 6s+, 6+) (3x) (Portrait)
            backgroundImageName = "background_1242x2208"
        case 414:  // 5.5" (iPhone 8+, 7+, 6s+, 6+) (3x) (Landscape)
            backgroundImageName = "background_2208x1242"
        case 667:  // 4.7" (iPhone 8, 7, 6s, 6) (2x) (Portrait)
            backgroundImageName = "background_750x1334"
        case 375:
            // 5.8" (iPhone X) (3x) (Landscape)
            if (UIScreen.main.bounds.width == 812) {
                backgroundImageName = "background_2436x1125"
            }
            // 4.7" (iPhone 8, 7, 6s, 6) (2x) (Landscape)
            else if (UIScreen.main.bounds.width == 667) {
                backgroundImageName = "background_1334x750"
            }
        case 568:  // 4.0" (iPhone SE, 5s, 5c, 5) (2x) (Portrait)
            backgroundImageName = "background_640x1136"
        case 320:  // 4.0" (iPhone SE, 5s, 5c, 5) (2x) (Landscape)
            backgroundImageName = "background_1136x640"
        default:
            break
        }
    }
    else if UIDevice().userInterfaceIdiom == .pad
    {
        switch UIScreen.main.bounds.height
        {
        case 1366:  // 12.9" (iPad Pro 12.9) (2x) (Portrait)
            backgroundImageName = "background_2048x2732"
        case 1112:  // 10.5" (iPad Pro 10.5) (2x) (Portrait)
            backgroundImageName = "background_1668x2224"
        case 834:  // 10.5" (iPad Pro 10.5) (2x) (Landscape)
            backgroundImageName = "background_2224x1668"
        case 1024:
            // 12.9" (iPad Pro 12.9) (2x) (Landscape)
            if (UIScreen.main.bounds.width == 1366) {
                backgroundImageName = "background_2732x2048"
            }
            // 9.7" & 7.9" (iPad Pro 9.7, iPad Air 2, iPad Air, iPad 4, iPad 3, iPad Mini 4, iPad Mini 3, iPad Mini 2) (2x) (Portrait)
            else if (UIScreen.main.bounds.width == 1366) {
                backgroundImageName = "background_1536x2048"
            }
        case 768:  // 9.7" & 7.9" (iPad Pro 9.7, iPad Air 2, iPad Air, iPad 4, iPad 3, iPad Mini 4, iPad Mini 3, iPad Mini 2) (2x) (Landscape)
            backgroundImageName = "background_2048x1536"
        default:
            break
        }
    }
    self.backgroundImageView.image = UIImage(named: backgroundImageName)

и так далее, если необходимо включить другие устройства (например, Apple Watch).

person Martin    schedule 07.03.2018