在我们完成这个项目的技术预研之前,还有最后一块 UIKit 的拼图需要解决:一旦我们处理了用户的图片,生成一个 UIImage,我们需要将其存入用户的相册。这里用到一个叫UIImageWriteToSavedPhotosAlbum() 的 UIKit 函数。它的常规用法很琐碎,为了用好它,我们还得去 UIKit 走一遭。尤其在这种时刻,我们才会由衷地体会到 SwiftUI 的优越性。
在编写代码之前,我们需要对 Info.plist 做出一点小改动。你看,往相册里写入照片是一项受保护的操作,因此如果用户没有显式授权给我们,我们是不能做这件事的。
iOS 会负责请求权限并检查用户的响应,我们要做的是提供一个我们为什么要写入图片的简短的文本说明 。打开 Info.plist,右键空白区域,选择 Add Row。你会看到一个包含下拉选项的列表 —— 我们往下滚动,选择 “Privacy - Photo Library Additions Usage Description”。对于右边的值,输入文本 “我们想要保存您的滤镜图片。”
完成之后,我们就可以使用 UIImageWriteToSavedPhotosAlbum() 方法来写入照片了。之前我们已经实现了 loadImage() 方法:
func loadImage() {
guard let inputImage = inputImage else { return }
image = Image(uiImage: inputImage)
}
我们可以对它做简单的修改,在图片载入完成时立刻就保存。把下面这行添加到方法的末尾:
UIImageWriteToSavedPhotosAlbum