iOS 中的 UIImage

2025年3月17日 | 阅读 3 分钟

UIImage 类用于管理 iOS 应用程序中的图像。它是 NSObject 的子类,声明如下所示。

我们使用 Image 对象来表示应用程序中的图像数据。但是,Apple 提供了 UIImage 类来管理所有图像平台的数据。UIImage 对象包含单个图像或用于动画的图像序列。它是不可变的。因此,我们需要使用现有的图像数据来创建 UIImage 对象。我们可以将 UIImage 对象分配给 UIImageView 以在我们的界面上显示图像。

我们还可以使用图像来自定义其他对象,如按钮、滑块、分段控件等。我们也可以直接将图像绘制到视图中。我们还可以将 UIImage 数据作为 JSON 对象的一部分传递到 API 中。

但是,UIImage 对象支持所有平台原生图像格式;建议您在应用程序的大部分图像中使用 PNG 或 JPEG 文件。图像对象经过优化,可以读取和显示这两种格式,并且这些格式提供的性能优于大多数其他图像格式。由于 PNG 格式是无损的,因此特别推荐用于我们在应用程序界面中使用的图像。

如何创建 UIImage 对象?

正如我们在教程中已经提到的,UIImage 对象是不可变的。我们不能创建一个空的 UIImage 对象,并在以后附加图像数据。要创建一个 UIImage 对象,我们需要在文件或数据结构中包含图像数据。我们可以使用以下选项来创建 UIImage 对象。

  1. 我们可以使用 UIImage 类提供的 init(named:in:compatibleWith: ) 或 init(named: ) 初始化器来创建具有指定资源名称的图像。但是,资源必须存在于我们应用程序的主包中。这些方法会自动缓存图像数据;特别推荐用于您经常使用的图像。
  2. 我们还可以使用 imageWithContentsOfFile: 或 init (contentsOfFile: ) 方法来创建图像对象。此选项与第一个选项不同,因为它可以每次都直接从磁盘加载图像来创建 UIImage 对象。但是,不建议使用此方法重复加载同一图像。
  3. 我们还可以使用 animatedImage(with: duration: ) 和 animatedImageNamed(_: duration: ) 方法来创建包含图像序列的单个 UIImage 对象。我们可以将此 UIImage 对象分配给 UIImageView 对象,以在我们的界面中显示动画。

创建对象后,我们无法更改 UIImage 属性,因为它不可变。它还允许我们安全地在任何线程中使用 UIImage 对象。图像资源是管理应用程序中包含的图像的最重要方式。XCode 项目包含资源库,用于管理应用程序中的多图像集。图像集包含应用程序使用的单个图像的变体。单个图像集可以为不同的平台、不同的特征环境(紧凑或常规)和不同的比例因子提供不同版本的图像。

我们还可以使用 UIImagePickerController 通过设备的相机或图库提供图像。使用 UIImagePickerController 需要额外的用户权限才能从相机或图库获取图像。

图像是否可比较?

UIImage 对象是可比较的,因为我们可以使用 isEqual(_ : ) 方法来确定两个图像对象是否包含相同的图像数据。我们可以使用以下代码来比较两个图像。

示例

让我们创建一个 XCode 项目,在界面上显示图像。为此,创建 XCode 项目并在资源库中添加示例图像资源,如下所示。

UIImage in iOS

在 ViewController.swift 中添加以下代码,如下所示。

它会在屏幕上显示以下输出。

UIImage in iOS