如何防止在Swift中从UIImagePickerController自动保存图像?

时间:2018-07-10 12:27:46

标签: ios swift uiimageview swift4 uiimagepickercontroller

我的应用中有一个简单的场景。

我有1次编辑UIButton,从“图片库”中选择图像,并在UIImageView中显示了所选图像。

@IBAction func btnEdit(_ sender: UIButton) {

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary) {
        let picker:UIImagePickerController = UIImagePickerController()
        picker.sourceType = .photoLibrary
        picker.delegate = self
        picker.allowsEditing = true
        picker.sourceType = .photoLibrary
        picker.navigationBar.isTranslucent = false
        self.present(picker, animated: true)
    } else {
        print("Photo Library is not available.")
    }

}

UINavigationControllerDelegate和UIImagePickerControllerDelegate

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    if let pickedimage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
        self.imageView.image = pickedimage
    } else if let pickedimage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        self.imageView.image = pickedimage
    } else {
        print("Something went wrong while select photo from Library...!")
    }

    dismiss(animated: true, completion: nil)

}

运作良好。但是所选的图像会自动保存在tmp文件夹中

我不想保存在文档目录中。

enter image description here

如何停止在文档目录中自动保存图像?

2 个答案:

答案 0 :(得分:1)

文档目录和临时目录不同。当您的应用未运行时, tmp 文件夹将被清除。如有必要,可以在完成图像的使用后删除tmp文件夹的内容。 How to delete tmp folder content

答案 1 :(得分:1)

UIImagePickerController.InfoKey是否包含imageURL键的值?
如果是这样,它是否映射到您的tmp目录中的此位置?

我对文档的理解是UIImagePickerController创建了供应用程序选择使用的图像的副本,因此您可以进行操作而不必担心会影响用户的图像库。该副本存储在tmp目录中。如果出于某种原因要清除该副本,则有责任删除该图像。

从iOS应用文件系统上的Apple文档中(添加重点):

  

tmp /

     

使用此目录写不需要的临时文件   在您的应用启动之间持续存在。 您的应用应删除文件   从不再需要它们的目录中 ;然而   当您的应用未运行时,系统可能会清除此目录。的   iTunes或iCloud不会备份此目录的内容。

https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW4

假设您捕获了imageURL,将进行以下清理:

let fmTmp = FileManager.default
try! fmTmp.removeItem(at: theImageURL)