我有一个显示来自互联网的 GIF 的应用程序,我正在尝试添加将 GIF 保存到相机胶卷的功能。我正在使用PHPhotoLibrary
并且我试图使用我在几个 SO 问题中看到的方法将其保存到相机胶卷中,例如这个:
func saveToCameraRoll(imageUrl: String) {
PHPhotoLibrary.shared().performChanges({ _ in
let createRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(
atFileURL: URL(string: imageUrl)!)
}) { success, error in
guard success else {
log.debug("failed to save gif \(error)")
return
}
log.debug("successfully saved gif")
}
}
然而,这给了我failed to save gif Optional(Error Domain=NSCocoaErrorDomain Code=-1 "(null)")
,这似乎是因为 .gif 文件格式,但我找不到另一个如何在不使用已弃用的 .gif 文件的情况下保存到相机胶卷的示例ALAssetsLibrary.writeImageDataToSavedPhotosAlbum
。
我尝试从 Safari 中保存 GIF,并且效果很好:发送给其他人时 GIF 动画,所以我知道我想要做的事情是可能的,但是有人可以指出我 PHPhotoLibrary API 的正确部分吗?
编辑:基于this answer to a similar question,我想出了如何做我想做的事情Data
,PHAssetCreationRequest
如下所示:
class func saveToCameraRoll(imageUrl: String) {
ImageService.GetImageData(url: imageUrl) { data in // This helper function just fetches Data from the url using Alamofire
guard let data = data else { return }
PHPhotoLibrary.shared().performChanges({ _ in
PHAssetCreationRequest.forAsset().addResource(with: .photo, data: data, options: nil)
}) { success, error in
guard success else {
log.debug("failed to save gif \(error)")
return
}
log.debug("successfully saved gif")
}
}
}