如何从Xcode 8中的Assets.xcassets添加不同屏幕尺寸的图像?

时间:2017-05-16 07:29:41

标签: ios swift uiimage image-size launchimage

我为登录屏幕创建了不同大小的背景图像。
我指的是苹果链接https://developer.apple.com/ios/human-interface-guidelines/graphics/launch-screen/
但我没有使用启动屏幕,我只是想在登录界面添加背景。

我想知道哪个是1x,2x和3x?

enter image description here


另一个问题是当我创建图像集时,应该将图像的大小拖到哪个位置。我不知道那个。或者我们只需要3张图片(通用行)?
那么,景观图像怎么样?我应该把它放在哪里? enter image description here

3 个答案:

答案 0 :(得分:7)

我会创建以下尺寸:

<强> 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 1st&amp; 2nd Generation / 3rd&amp; 4th&amp; Pad Mini 2nd&amp; 3rd Generation)

答案 1 :(得分:2)

实际上,你需要为此编码。

首先,您可以使用不同的名称将图像分别放在Assets中。

第二次,请使用以下代码:

+----+-----------+------------+
| id | ip        | date       |
+----+-----------+------------+
|  1 | 127.0.0.1 | 2017-05-16 |
+----+-----------+------------+
1 row in set (0.00 sec)

答案 2 :(得分:0)

我同意Yun CHEN的观点,因为我认为最灵活的解决方案是为每个分辨率设置一个图像集,从而避免在设备上执行图像缩放。

根据设备的渲染系数(2x,3x等)(例如,4.7英寸iPhone上的2倍,作为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)。