新 Iphone 型号发布后的整页背景图像大小 (Xcode)

Posted

技术标签:

【中文标题】新 Iphone 型号发布后的整页背景图像大小 (Xcode)【英文标题】:Full page background image sizes after new Iphone models has been released (Xcode) 【发布时间】:2018-09-17 05:27:27 【问题描述】:

这是您所知道的 iPhone 分辨率;

Iphone Xs Max 414x896 点以 3 倍渲染,1242x2688 像素 Iphone Xr 414x896 点渲染为 2x,828x1792 像素 Iphone X,Xs 375x812 点。以 3 倍、1125x2436 像素渲染 Iphone 6+、6s+、7+、8+ 414x716 点,3x 渲染,1242x2208 像素 Iphone 6、6s、7、8 375x667 点,以 2x 渲染,750x1334px

假设我想创建一个整页背景图片。你能确认一下 x、@2x 和 @3x 的尺寸吗?

@x 的 375x667 像素是真的吗? @2x 是 750x1334 像素吗? 3x 大小呢? 1242x2688(@3x 尺寸的参考应该是 iPhone Xs Max?)

【问题讨论】:

请看***.com/a/52888548/2892357回答 【参考方案1】:

这是为不同屏幕尺寸(iPhone XS Max、iPhone XS、iPhone Xr)定义图像的非官方技巧。

我发现了一个窍门。在我的应用程序中,我们有所有 iPhone 设备的启动屏幕(见屏幕截图)。

Launch screen 之后出现的下一个屏幕是Login。它应该具有与Launch screen 相同的图像。 不幸的是,Xcode 在开箱即用的Assets 中创建了以下image set(iPhone 1x、2x、3、iPad 1x、2x - 见图)。

在从 Launch ScreenLogin screen 的转换过程中,我看到了伪影,因为 iPhone X、Xs Max、iPhone Xr 上的图像拉伸

为了解决这个问题,我将 LaunchImage.launchimage 文件夹中的 Contents.json 文件复制到 Finder 中的 BackgroundImage.imageset 文件夹(参见下图步骤)

更新 AppImages.xcassets/BackgroundImage.imageset/Contents.json文件的内容:


  "images" : [
    
      "idiom" : "iphone",
      "scale" : "1x"
    ,
    
      "idiom" : "iphone",
      "subtype" : "retina4",
      "scale" : "1x"
    ,
    
      "idiom" : "iphone",
      "filename" : "retina4640x960.png",
      "scale" : "2x"
    ,
    
      "idiom" : "iphone",
      "filename" : "retina4640x1136.png",
      "subtype" : "retina4",
      "scale" : "2x"
    ,
    
      "idiom" : "iphone",
      "filename" : "retina47750x1334.png",
      "subtype" : "667h",
      "scale" : "2x"
    ,
    
      "idiom" : "iphone",
      "filename" : "iPhoneXr828x1792.png",
      "subtype" : "1792h",
      "scale" : "2x"
    ,
    
      "idiom" : "iphone",
      "scale" : "3x"
    ,
    
      "idiom" : "iphone",
      "subtype" : "retina4",
      "scale" : "3x"
    ,
    
      "idiom" : "iphone",
      "filename" : "retina551242x2208.png",
      "subtype" : "736h",
      "scale" : "3x"
    ,
    
      "idiom" : "iphone",
      "filename" : "iPhoneX1125x2436.png",
      "subtype" : "2436h",
      "scale" : "3x"
    ,
    
      "idiom" : "iphone",
      "filename" : "iPhoneXSMax1242x2688.png",
      "subtype" : "2688h",
      "scale" : "3x"
    ,
    
      "idiom" : "ipad",
      "filename" : "ipad1024x768.png",
      "scale" : "1x"
    ,
    
      "idiom" : "ipad",
      "filename" : "ipad2048x1536.png",
      "scale" : "2x"
    
  ],
  "info" : 
    "version" : 1,
    "author" : "xcode"
  

现在在Xcode 我看到以下模板。我可以为以下设备定义背景图像 Retina HD 4.7"(iPhone 6, iPhone 7, iPhone 8), Retina HD 5.5" (iPhone 6 Plus, iPhone 7 Plus, iPhone 8 Plus), iPhone Xr, iPhone X/iPhone Xs , iPhone Xs Max

【讨论】:

如果你能分享你修改后的 contents.json 文件会很棒【参考方案2】:

@Igor 有一个有趣的答案 :) 甚至除了一件事之外还不错 - 然后你的项目会随着图像数量成倍增长。相反,您可以拥有 3 张图像(如果您想支持从 5 到 XSMax 的设备,甚至可以拥有 2 张图像)。所以图像是 4S 对角线,然后是 5、SE、6、7、8 和 Xr、X、Xs、XsMax。

当您需要选择正确的图像时,您可以使用以下代码:

extension UIImage 
    static func imageWithName(_ name: String) -> UIImage? 
        var finalName = name
        switch UIDevice.current.screenType 
        case .short: finalName += "@short"
        case .normal: finalName += "@normal"
        case .tall: finalName += "@tall"
        case .unknown: finalName = ""
        
        return UIImage(named: finalName)
    


extension UIDevice 
    enum DeviceType: String 
        case iPhones_4_4S = "iPhone 4 or iPhone 4S"
        case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
        case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
        case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
        case iPhones_X_XS = "iPhone X or iPhone XS"
        case iPhone_XR = "iPhone XR"
        case iPhone_XSMax = "iPhone XS Max"
        case unknown
    
    var deviceType: DeviceType 
        switch UIScreen.main.nativeBounds.height 
        case 960: return .iPhones_4_4S
        case 1136: return .iPhones_5_5s_5c_SE
        case 1334: return .iPhones_6_6s_7_8
        case 1792: return .iPhone_XR
        case 1920, 2208: return .iPhones_6Plus_6sPlus_7Plus_8Plus
        case 2436: return .iPhones_X_XS
        case 2688: return .iPhone_XSMax
        default: return .unknown
        
    

    enum ScreenType 
        case short, normal, tall, unknown
    
    var screenType: ScreenType 
        switch deviceType 
        case .iPhones_4_4S: return .short
        case .iPhones_5_5s_5c_SE: fallthrough
        case .iPhones_6_6s_7_8: fallthrough
        case .iPhones_6Plus_6sPlus_7Plus_8Plus: return .normal
        case .iPhone_XR: fallthrough
        case .iPhones_X_XS: fallthrough
        case .iPhone_XSMax: return .tall
        default: return .unknown
        
    

您应该像这样将图像存储在资产目录中 - 单一比例,用于通用设备并带有“@short”、“@normal”、“@tall”后缀

用法: bgImageView.image = UIImage.imageWithName("main_bg")

更新: 另一种选择只是使用像@1x @2x @3x 图像这样的普通方式,但使用内容模式比例填充:

bgImageView.contentMode = .scaleAspectFill

那么您的图像将完美地填满屏幕,只有您必须准备好从侧面裁剪它。如果它不会破坏您的图像视图,那么它是最简单和最好的解决方案。

P.S.:我知道我不是在回答主题启动器,而是在回答 Igor 的回答,但是由于 Apple 发布了新的屏幕尺寸,我来到这里寻找管理资产目录中图像的解决方案。

更新 2: 至于我在这个主题中遇到的主要问题和分辨率/比例解释here,我认为@3x 最好使用 XSMax 分辨率和@2x - Xr 分辨率,所以它会被裁剪但看起来很好而且很清晰contentMode = .scaleAspectFill 的设备,如上所述。对于导出图形,我会喜欢下面的图片:

Xr 的宽度为 1792w,@2x 尺寸和 2688w,@3x

【讨论】:

【参考方案3】:

为此,只需创建支持通用设备的图像集。

添加最新设备尺寸的单张图片,我使用的是 1242 × 2208。 在 xib/storyboard 中添加带有 content-Mode AspectFit 的 imageview 并且工作正常。

【讨论】:

【参考方案4】:

你可以使用更大的分辨率来解决这个问题

1X - 375x667 + Y

2X - (375*2)x(667*2) + 2Y

3X - (375*3)x(667*3) + 3Y

手机自动设置图片大小。

【讨论】:

作为您的评论,3x 高度大小将是 2001px。这将是质量损失,因为 iPhone Xs Max 需要 2688 像素的高度才能获得清晰的视野。谢谢回复。 @Ali Ihsan URAL 然后您可以使用更大的图像进行分辨率。这不是尺寸问题,是分辨率问题 我读过这个。我再说一遍。它不是尺寸问题。您不必为图像提供这些尺寸。您可以将 1000x1000 用于 1X , 2000x2000 用于 2X , 3000x3000 用于 3X 。因此,您不必考虑分辨率。只需为每张图片使用更大的分辨率。 我们需要给问题命名吗?我们没有。大小或分辨率,没关系。此外,我没有写“这是尺寸问题”或“这是分辨率问题”,我只是想为整页背景显示清晰的图像。如果我们在 iPhone Xs Max 中显示 2001 px(height)。质量不会好。因为此设备需要 2688 像素(高度)才能显示清晰的图像。这就是为什么你的回复可能是错误的。我写了这个。然后你说我,'然后你可以使用更大的图像来解决'。这是无稽之谈。因为我希望人们已经在我的问题中关注这个问题。 我的问题很简单:1242x2688 px 适合 @3x 吗? @3x 尺寸的参考应该是 iPhone Xs Max 吗?就是这样。是或否。如果答复为“否”,那么@3x 的参考设备/尺寸是多少? (iPhone)

以上是关于新 Iphone 型号发布后的整页背景图像大小 (Xcode)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 中处理具有 Windows Photo Gallery 质量的整页打印图像?

如何使QTextDocument适合打印机的整页宽度

mPDF:为整页使用背景图像

在整页、变暗、模糊的背景图像上添加居中文本?

Icefaces 1.8.2 中的整页刷新?

iPhone iOS:如何在图像背景上动态移动/调整图像大小?