4

我有一个显示来自互联网的 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,我想出了如何做我想做的事情DataPHAssetCreationRequest如下所示:

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")
    }
  }
}
4

0 回答 0