【问题标题】:How to prevent saving images automatically from UIImagePickerController in Swift?如何防止在 Swift 中从 UIImagePickerController 自动保存图像?
【发布时间】:2018-12-18 07:10:15
【问题描述】:

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

我有 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 文件夹中

我不想保存在 Document 目录中。

如何停止自动保存文档目录中的图片?

【问题讨论】:

    标签: ios swift uiimageview swift4 uiimagepickercontroller


    【解决方案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)
    

    【讨论】:

    • 如何访问 imagePickerController 函数中的 InfoKey?
    【解决方案2】:

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

    【讨论】:

    • 不,当应用程序处于前台/未运行/被杀死时,不会清理 tmp 文件夹。即使重新启动设备,所有图像和 tmp 文件夹也存在。删除 tmp 文件是唯一的选择。但是如何停止自动保存呢?
    • 我认为没有任何选项可以停止在 tmp 文件夹中自动保存。根据苹果文档,它应该被清理,也许它是在低内存中清理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多