在 iOS 开发中,保存图片到相册是一个常见的需求。无论你是在开发社交应用,还是在处理图片编辑器,了解如何将图片保存到用户的相册都是非常重要的。本文将为你详细介绍如何在 iOS 中使用 Swift 来实现这一功能。

1. 引入必要的框架

要保存图片到相册,我们需要使用 Photos 框架。首先,确保在你的 Xcode 项目中引入了这个框架。在 Info.plist 文件中添加以下键以请求用户的权限:

1
2
3
4
<key>NSPhotoLibraryUsageDescription</key>
<string>我们需要访问你的照片库,以便保存图片。</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>我们需要访问你的照片库,以便保存图片。</string>

2. 请求权限

在进行任何图片保存操作之前,我们需要请求用户的权限。只有在获得授权后,才能执行保存操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import Photos

func requestPhotoLibraryPermission(completion: @escaping (Bool) -> Void) {
PHPhotoLibrary.requestAuthorization { status in
switch status {
case .authorized:
completion(true)
case .denied, .restricted:
completion(false)
case .notDetermined:
completion(false)
case .limited:
completion(true)
@unknown default:
fatalError("未知授权状态")
}
}
}

3. 保存图片到相册

获得权限后,我们可以使用不同的方法来保存图片。以下是几种常见的方法:

3.1 使用 UIImageWriteToSavedPhotosAlbum

这是最简单直接的方法,适用于不需要更多控制的情况:

1
2
3
4
5
6
7
8
9
10
11
func saveImageUsingUIImageWriteToSavedPhotosAlbum(image: UIImage) {
UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}

@objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
if let error = error {
print("保存图片失败: \(error.localizedDescription)")
} else {
print("图片保存成功")
}
}

更多信息请访问 Apple Developer Documentation

3.2 使用 PHPhotoLibrary

这是更灵活的方法,适合需要更复杂操作的情况:

1
2
3
4
5
6
7
8
9
10
11
func saveImageUsingPHPhotoLibrary(image: UIImage) {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAsset(from: image)
}) { success, error in
if success {
print("图片保存成功")
} else if let error = error {
print("保存图片失败: \(error.localizedDescription)")
}
}
}

更多信息请访问 Apple Developer Documentation