Захват изображения сессии не сохраняется

Я использую Vision для идентификации изображений. Из тех изображений, которые были захвачены, я хочу сохранить их в фото-библиотеке пользователей. Моя проблема в том, что он не сохраняется в библиотеке после нажатия кнопки "Да", чтобы сохранить захваченное изображение. Из метода "takePhoto" будет получено изображение текущего объекта, затем он вызовет оповещение, чтобы спросить пользователя, хотят ли они сохранить изображение или нет. Что мне не хватает?

fileprivate func findAlbum(albumName: String) -> PHAssetCollection? {
    let fetchOptions = PHFetchOptions()
    fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
    let fetchResult: PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
    guard let photoAlbum = fetchResult.firstObject else {
    return nil
}
    return photoAlbum
}

fileprivate func createAlbum(albumName: String, completion: @escaping (PHAssetCollection?)-> ()) {
    var albumPlaceHolder: PHObjectPlaceholder?
    PHPhotoLibrary.shared().performChanges ({
    let createAlbumRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: albumName)
    albumPlaceHolder = createAlbumRequest.placeholderForCreatedAssetCollection
    }, completionHandler: { success, error in
        if success {
        guard let placeHolder = albumPlaceHolder else {
        completion(nil)
        return
    }
        let fetchResult = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [placeHolder.localIdentifier], options: nil)
        guard let album = fetchResult.firstObject else {
        completion(nil)
        return
    }
       completion(album)
   } else {
        completion(nil)
        }
    })
}
@objc func save(image: Data, withName: String) throws {
    let url = URL(fileURLWithPath: NSTemporaryDirectory().appending(withName))
    try image.write(to: url, options: .completeFileProtectionUntilFirstUserAuthentication)
    let result = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary, options: nil)
    rollCollection = result.firstObject
    PHPhotoLibrary.shared().performChanges({
    let request = PHAssetCreationRequest.forAsset()
    request.addResource(with: .photo, data: image, options: nil)
    let creationOptions = PHAssetResourceCreationOptions()
    creationOptions.shouldMoveFile = true
    request.addResource(with: .alternatePhoto, fileURL: url, options: nil)
})
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?){
        photoData = photo.fileDataRepresentation()
    }
}

@objc func takePhoto() {
    imageSession.stopRunning()
    let alertView = UIAlertController(title: "Alert", message: "Would you like to save the image to library?", preferredStyle: UIAlertControllerStyle.alert)
    let cancel = UIAlertAction(title: "No", style: .cancel, handler: nil)
    let savePhoto = UIAlertAction(title: "Yes", style: .default) { (alertView: UIAlertAction) in
        if let image = self.currentImage {
            PHPhotoLibrary.requestAuthorization({ (status) in
                if status == .authorized {
                    do {
                        // this is not being called
                    try self.save(image: image.image, withName: image.imageName)
                } catch let error {
                print(error.localizedDescription)
               }
             } else {
            print("There is no problem")
         }
       }
   )}
}
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let fileURL = paths[0].appendingPathComponent("Photo One")
    try? FileManager.default.removeItem(at: fileURL)
    alertView.addAction(cancel)
    alertView.addAction(savePhoto)
    self.present(alertView, animated: true, completion: nil)
}

0 ответов

Другие вопросы по тегам