Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新款Iphone发布后的整页背景图像大小(Xcode)_Iphone_Xcode - Fatal编程技术网

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

新款Iphone发布后的整页背景图像大小(Xcode),iphone,xcode,Iphone,Xcode,以下是您知道的iPhone解决方案 Iphone Xs最大414x896点以3x、1242x2688像素渲染 Iphone Xr 414x896点以2x、828x1792像素渲染 Iphone X、Xs 375x812点。渲染速度为3x,1125x2436像素 Iphone 6+、6s+、7+、8+414x716点,渲染为3x、1242x2208 px Iphone 6、6s、7、8 375x667点,渲染速度为2x、750x1334px 让我们假设我想创建一个整页背景图像。您能确认x、@2

以下是您知道的iPhone解决方案

  • Iphone Xs最大414x896点以3x、1242x2688像素渲染
  • Iphone Xr 414x896点以2x、828x1792像素渲染
  • Iphone X、Xs 375x812点。渲染速度为3x,1125x2436像素
  • Iphone 6+、6s+、7+、8+414x716点,渲染为3x、1242x2208 px
  • Iphone 6、6s、7、8 375x667点,渲染速度为2x、750x1334px
让我们假设我想创建一个整页背景图像。您能确认x、@2x和@3x的尺寸吗

  • 对于@x,375x667 px是真的吗
  • 对于@2x,750x1334 px是否为真
  • 3倍大小的怎么样?1242x2688(关于@3x尺寸,请参考iPhone Xs Max)

    • 您可以使用更大的分辨率来解决此问题

      1X-375x667+Y

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

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


      手机会自动设置图像大小。

      这是为不同屏幕大小(iPhone XS Max、iPhone XS、iPhone Xr)定义图像的非正式技巧。

      我发现了一个诡计。在我的应用程序中,所有iPhone设备都有启动屏幕(请参见屏幕截图)。

      启动屏幕
      之后出现的下一个屏幕是
      登录
      。它应该具有与
      启动屏幕
      相同的图像。 不幸的是
      Xcode
      创建以下
      image set
      in
      Assets
      开箱即用(iPhone 1x、2x、3、iPad 1x、2x-请参阅图像)。

      在从
      Launch Screen
      Login Screen
      的转换过程中,我看到了一些瑕疵,因为图像在iphonex、xsmax、iphonexr

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

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

      {
      “图像”:[
      {
      “成语”:“iphone”,
      “刻度”:“1x”
      },
      {
      “成语”:“iphone”,
      “子类型”:“视网膜4”,
      “刻度”:“1x”
      },
      {
      “成语”:“iphone”,
      “文件名”:“retina4640x960.png”,
      “比例”:“2x”
      },
      {
      “成语”:“iphone”,
      “文件名”:“retina4640x1136.png”,
      “子类型”:“视网膜4”,
      “比例”:“2x”
      },
      {
      “成语”:“iphone”,
      “文件名”:“retina47750x1334.png”,
      “子类型”:“667h”,
      “比例”:“2x”
      },
      {
      “成语”:“iphone”,
      “文件名”:“iPhoneXr828x1792.png”,
      “子类型”:“1792h”,
      “比例”:“2x”
      },
      {
      “成语”:“iphone”,
      “比例”:“3x”
      },
      {
      “成语”:“iphone”,
      “子类型”:“视网膜4”,
      “比例”:“3x”
      },
      {
      “成语”:“iphone”,
      “文件名”:“retina551242x2208.png”,
      “子类型”:“736h”,
      “比例”:“3x”
      },
      {
      “成语”:“iphone”,
      “文件名”:“iPhoneX1125x2436.png”,
      “子类型”:“2436h”,
      “比例”:“3x”
      },
      {
      “成语”:“iphone”,
      “文件名”:“iPhoneXSMax1242x2688.png”,
      “子类型”:“2688h”,
      “比例”:“3x”
      },
      {
      “成语”:“ipad”,
      “文件名”:“ipad1024x768.png”,
      “刻度”:“1x”
      },
      {
      “成语”:“ipad”,
      “文件名”:“ipad2048x1536.png”,
      “比例”:“2x”
      }
      ],
      “信息”:{
      “版本”:1,
      “作者”:“xcode”
      }
      }
      
      现在在
      Xcode
      中,我看到了以下模板。我可以为以下设备定义背景图像:视网膜高清4.7(iPhone 6、iPhone 7、iPhone 8)、视网膜高清5.5(iPhone 6 Plus、iPhone 7 Plus、iPhone 8 Plus)、iPhone Xr、iPhone X/iPhone Xs、iPhone Xs Max

      @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”、“@toll”后缀

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

      更新: 另一个选项只是使用普通方式,如@1x@2x@3x图像,但使用内容模式缩放方面填充:

      bgImageView.contentMode = .scaleAspectFill
      
      然后你的图像将完美地填满屏幕,只有你准备好从侧面裁剪。如果它没有破坏你的形象,那么它是最简单和最好的解决方案

      注:我知道我不是在回答一个话题,而是在回答Igor的答案,但我来到这里是为了寻找管理资产目录中图像的解决方案,因为苹果发布了新尺寸的屏幕

      更新2: 就我在本主题中得到的主要问题和解释的分辨率/比例而言,我认为对于使用XSMax分辨率的@3x很好,对于@2x-Xr分辨率,那么它将被裁剪,但在所有具有contentMode=.ScaleSpectFill的设备上看起来都很好且清晰,如上所述。对于导出图形,我会像下图所示那样:


      对于@2x尺寸,Xr的宽度为1792w;对于@3x尺寸,Xr的宽度为2688w,只需使用通用设备支持创建图像集即可

      添加具有我使用的最新设备尺寸的单个图像1242 × 2208
      在xib/storyboard中,使用内容模式添加imageviewAspectFit,其工作正常。

      如您所述,3倍高度的大小将为2001px。这将是一个质量损失,因为iPhone Xs Max需要2688像素的高度才能获得清晰的视野。谢谢你的回复@Ali Ihsan URALThen您可以使用更大的图像来获得分辨率。这不是尺寸问题,而是分辨率问题