iOS:为所有屏幕显示相同质量的图像

iOS:为所有屏幕显示相同质量的图像,ios,iphone,swift,storyboard,constraints,Ios,Iphone,Swift,Storyboard,Constraints,故事板中的“我的视图”包含一个imageView,其约束条件为top=0、height=55、width=230和水平居中。在最新版本的Xcode中使用“查看为”选项,我意识到图像的显示和质量并不是所有屏幕都一样。iPhone4S的质量很好,但图像同样大。另外,在iPhone6sPlus屏幕上,我发现图像大小适合屏幕,但质量不好 如何在所有屏幕上以相同的方式显示图像?任何人都可以给我正确的约束来解决这个问题吗?根据设备的屏幕,您应该定义图像的各种表示形式 从门户网站: iOS使用坐标系在屏幕上放

故事板中的“我的视图”包含一个imageView,其约束条件为top=0、height=55、width=230和水平居中。在最新版本的Xcode中使用“查看为”选项,我意识到图像的显示和质量并不是所有屏幕都一样。iPhone4S的质量很好,但图像同样大。另外,在iPhone6sPlus屏幕上,我发现图像大小适合屏幕,但质量不好


如何在所有屏幕上以相同的方式显示图像?任何人都可以给我正确的约束来解决这个问题吗?

根据设备的屏幕,您应该定义图像的各种表示形式

从门户网站:

iOS使用坐标系在屏幕上放置内容。这 坐标系基于点的测量,这些点映射到 显示中的像素

如果您定义了所有三种图像分辨率(
normal
/
@1x
@2x
@3x
),您就可以开始了

重要的是,
normal
@1x
应具有以下参数:
高度:55,宽度:230

@2x
的大小应该是
@1x
的两倍:
高度:110,宽度:460

@3x
的大小应该是
@1x
的三倍:
高度:165,宽度:690

假设您的图像名为
my_image
,它是一个png

  • 应该调用
    @1x
    my\u image.png
  • @2x
    应该被调用:
    my_image@2x.png
  • 应该调用
    @3x
    my_image@3x.png
将所有这些图像添加到
Assets.xcsets
。单击
Assets.xcsets
。打开后,您应该会在左侧看到一个
+
标志

点击
+
符号并为您的图像命名:

并将其插入这些插槽中:

现在,当您尝试使用此图像时,您只需用Swift简单地说:

let image = UIImage(named: "my_image")

根据设备的屏幕,您应该定义图像的各种表示形式

从门户网站:

iOS使用坐标系在屏幕上放置内容。这 坐标系基于点的测量,这些点映射到 显示中的像素

如果您定义了所有三种图像分辨率(
normal
/
@1x
@2x
@3x
),您就可以开始了

重要的是,
normal
@1x
应具有以下参数:
高度:55,宽度:230

@2x
的大小应该是
@1x
的两倍:
高度:110,宽度:460

@3x
的大小应该是
@1x
的三倍:
高度:165,宽度:690

假设您的图像名为
my_image
,它是一个png

  • 应该调用
    @1x
    my\u image.png
  • @2x
    应该被调用:
    my_image@2x.png
  • 应该调用
    @3x
    my_image@3x.png
将所有这些图像添加到
Assets.xcsets
。单击
Assets.xcsets
。打开后,您应该会在左侧看到一个
+
标志

点击
+
符号并为您的图像命名:

并将其插入这些插槽中:

现在,当您尝试使用此图像时,您只需用Swift简单地说:

let image = UIImage(named: "my_image")

尝试为您的应用程序设置正确的内容模式UIImageView@RaduNunu你能告诉我这种情况下最好的内容模式是什么吗?虽然有一些,但我想你需要AspectToFit或AspectToFill,两者都尊重图像的比例,请尝试为您的图像设置正确的内容模式UIImageView@RaduNunu你能告诉我这种情况下最好的内容模式是什么吗?虽然有一些,但我想你需要AspectToFit或AspectToFill,两者都尊重你图像的比例谢谢你的回复。如果我明白你所说的,我必须有相同的图像,但有3个不同的分辨率(3份)。在代码中,我必须检测屏幕大小以显示正确的图像(因此分辨率正确)。不是吗?第一部分你是对的,需要从图像中获得3种不同的分辨率。但是,如果您使用正确的后缀将它们添加到资产目录中,操作系统将为您选择正确的后缀。我在我的答案中添加了一个关于命名的小例子。感谢编辑,我现在明白了我要做什么,但我有一个小问题:我的项目中没有Images.xcasets。我只有资产,老实说,我从来没有用过。你能指导我吗?Assets.xcsets是一样的。我将添加一些截图。非常感谢!谢谢你的回复。如果我明白你所说的,我必须有相同的图像,但有3个不同的分辨率(3份)。在代码中,我必须检测屏幕大小以显示正确的图像(因此分辨率正确)。不是吗?第一部分你是对的,需要从图像中获得3种不同的分辨率。但是,如果您使用正确的后缀将它们添加到资产目录中,操作系统将为您选择正确的后缀。我在我的答案中添加了一个关于命名的小例子。感谢编辑,我现在明白了我要做什么,但我有一个小问题:我的项目中没有Images.xcasets。我只有资产,老实说,我从来没有用过。你能指导我吗?Assets.xcsets是一样的。我将添加一些截图。非常感谢!