首页 > 解决方案 > 检索 UIActivityViewController 保存的图像路径

问题描述

用户可以使用工作表将 UIImageView 上的图像保存到库中UIActivityViewController,也可以将其分享或发布到社交媒体,如下所示:

在此处输入图像描述

如果用户选择“保存图像”,则 UIActivityViewController 无法返回保存的图像路径。它只会默默地保存和关闭。

我如何检索保存它的路径?我将存储访问已保存图像的路径并将它们显示在另一个视图中。非常感谢您的帮助。

编辑:下面是当用户点击共享按钮时我呈现 UIActivityViewController 的方式。

let imageShare = [ self.imageView.image ]
let activityViewController = UIActivityViewController(activityItems: imageShare as [Any] , applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
activityViewController.popoverPresentationController?.sourceRect = self.shareButton.frame

self.present(activityViewController, animated: true, completion: nil)

标签: iosswiftfilepathuiactivityviewcontroller

解决方案


我认为问题是:既然你已经有了图像......你为什么要获得那条路径?

但是 - 您可以在完成中获得选定的“分享”活动UIActivityViewController

func shareImage(_ img: UIImage) -> Void {
    
    let items = [img]
    let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
    
    activityViewController.popoverPresentationController?.sourceView = self.view
    activityViewController.popoverPresentationController?.sourceRect = self.shareButton.frame

    activityViewController.completionWithItemsHandler = { (activityType: UIActivity.ActivityType?, completed:
                                        Bool, arrayReturnedItems: [Any]?, error: Error?) in
        if completed {
            if let act = activityType {
                switch act {
                case .saveToCameraRoll:
                    print("Save Image was selected")
                    // do something here
                    // such as getting the asset reference?
                    //  or getting the URL to the asset?
                
                case .copyToPasteboard:
                    print("Copy was selected")
                    
                default:
                    print("Something else...")
                }
            }
        } else {
            print("Cancel was selected")
        }
        if let shareError = error {
            print("error while sharing: \(shareError.localizedDescription)")
        }

    }
    
    present(activityViewController, animated: true)
    
}

因此,根据您真正想要的内容,您可以轻松找到用于从相机胶卷(或其资产参考或 URL 等)中获取最近保存的图像的示例代码。


推荐阅读