我试图在Instagram的共享流中打开图像,而不必将图像下载到照片库中。这两种方法都可行,但它们也有缺点:
第一种方法:该方法将图像保存在临时位置。然后,它使用UIDocumentInteractionController
在Instagram的共享流中打开图像。这里的问题是,一旦显示UIDocumentInteractionController
,就会显示多个应用程序,我想避免这种情况。
var documentController: UIDocumentInteractionController!
func shareToInstagram(image: UIImage) {
DispatchQueue.main.async {
let instagramURL = URL(string: "instagram://app")
if UIApplication.shared.canOpenURL(instagramURL!) {
let imageData = UIImageJPEGRepresentation(image, 100)
let writePath = (NSTemporaryDirectory() as NSString).appendingPathComponent("instagram.igo")
do {
try imageData?.write(to: URL(fileURLWithPath: writePath), options: .atomic)
} catch {
print(error)
}
let fileURL = URL(fileURLWithPath: writePath)
documentController = UIDocumentInteractionController(url: fileURL)
documentController.uti = "com.instagram.exlusivegram"
documentController.presentOpenInMenu(from: self.view.bounds, in: self.view, animated: true)
} else {
print(" Instagram is not installed ")
}
}
}
第二种方法:这是一种很好的方法,因为它不使用UIDocumentInteractionController
,而是立即在Instagram共享流中打开图像。这种方法的问题在于,您必须首先将图像保存到照片库中,这是我要避免的事情。
func shareImage() {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
guard let lastAsset = fetchResult.firstObject else { return }
let localIdentifier = lastAsset.localIdentifier
let u = "instagram://library?LocalIdentifier=" + localIdentifier
let url = URL(string: u)!
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
print("Error")
}
}
我想知道是否可以使用第二种方法而不必将图像保存到照片库中?第一种方法似乎首先将其保存到临时目录中,第二种方法是否有可能这样做?
谢谢