iOS - Swift 3 分享扩展预览图片
iOS - Swift 3 Share Extension Preview Image
我目前正在构建一个接受 URL 的共享扩展程序。作为其中的一部分,我按照上一个问题中的概述自定义了我的共享屏幕,以创建一个全屏视图控制器。这一切都很好。但是在默认的共享作曲家视图中,我注意到有一个网页的预览图像。我试图在我的扩展程序中访问它,但我似乎无法掌握它。
具体来说,我一直在尝试使用
方法
loadPreviewImage
https://developer.apple.com/reference/foundation/nsitemprovider/1403925-loadpreviewimage
您会在文档中注意到,这为完成处理程序说明了以下内容
completionHandler
A completion handler block to execute with the results. The first parameter of this block must be a parameter of type NSData, NSURL, UIImage (in iOS), or NSImage (in macOS) for receiving the image data. For more information about implementing the block, see CompletionHandler.
但是,如果我尝试在我的完成块中将其设置为 UIImage,我会收到
错误
Cannot convert value of type '(UIImage, _) -> ()' to expected argument
type 'NSItemProvider.CompletionHandler!'
通过 guard 语句确认 itemProvider 是 NSItemProvider 实例的示例代码
itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in
}
完成处理程序的文档说将其设置为您想要的类型,它会尝试将数据强制转换为您指定的类型。谁看过这个吗?我不确定在这里做什么,因为我看不到我做错了什么。
https://developer.apple.com/reference/foundation/nsitemprovider/completionhandler
如果一切都失败了,我会考虑使用一些 Javascript 从 dom 获取图像,但我更喜欢 Apple 似乎提供的预览图像
我不知道为什么
中的代码
itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in
}
点击 Post 按钮时不调用。
我的方法是在方法
中保存预览图像
override func configurationItems() -> [Any]! {
}
作为
let inputItem: NSExtensionItem = self.extensionContext?.inputItems[0] as! NSExtensionItem
let itemProvider = inputItem.attachments![0] as! NSItemProvider
if (itemProvider.hasItemConformingToTypeIdentifier("public.url")) {
itemProvider.loadPreviewImage(options: nil, completionHandler: { (item, error) in // 画像を取得する
if let image = item as? UIImage {
if let data = UIImagePNGRepresentation(image) {
self.photoNSURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("preview.png") as NSURL!
do {
try data.write(to: self.photoNSURL as URL, options: .atomic)
} catch {
print("\(#file)#\(#function)(\(#line)): error: \(error.localizedDescription)")
}
}
}
})
}
我目前正在构建一个接受 URL 的共享扩展程序。作为其中的一部分,我按照上一个问题中的概述自定义了我的共享屏幕,以创建一个全屏视图控制器。这一切都很好。但是在默认的共享作曲家视图中,我注意到有一个网页的预览图像。我试图在我的扩展程序中访问它,但我似乎无法掌握它。
具体来说,我一直在尝试使用
方法loadPreviewImage
https://developer.apple.com/reference/foundation/nsitemprovider/1403925-loadpreviewimage
您会在文档中注意到,这为完成处理程序说明了以下内容
completionHandler A completion handler block to execute with the results. The first parameter of this block must be a parameter of type NSData, NSURL, UIImage (in iOS), or NSImage (in macOS) for receiving the image data. For more information about implementing the block, see CompletionHandler.
但是,如果我尝试在我的完成块中将其设置为 UIImage,我会收到
错误Cannot convert value of type '(UIImage, _) -> ()' to expected argument type 'NSItemProvider.CompletionHandler!'
通过 guard 语句确认 itemProvider 是 NSItemProvider 实例的示例代码
itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in
}
完成处理程序的文档说将其设置为您想要的类型,它会尝试将数据强制转换为您指定的类型。谁看过这个吗?我不确定在这里做什么,因为我看不到我做错了什么。
https://developer.apple.com/reference/foundation/nsitemprovider/completionhandler
如果一切都失败了,我会考虑使用一些 Javascript 从 dom 获取图像,但我更喜欢 Apple 似乎提供的预览图像
我不知道为什么
中的代码itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in
}
点击 Post 按钮时不调用。
我的方法是在方法
中保存预览图像override func configurationItems() -> [Any]! {
}
作为
let inputItem: NSExtensionItem = self.extensionContext?.inputItems[0] as! NSExtensionItem
let itemProvider = inputItem.attachments![0] as! NSItemProvider
if (itemProvider.hasItemConformingToTypeIdentifier("public.url")) {
itemProvider.loadPreviewImage(options: nil, completionHandler: { (item, error) in // 画像を取得する
if let image = item as? UIImage {
if let data = UIImagePNGRepresentation(image) {
self.photoNSURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("preview.png") as NSURL!
do {
try data.write(to: self.photoNSURL as URL, options: .atomic)
} catch {
print("\(#file)#\(#function)(\(#line)): error: \(error.localizedDescription)")
}
}
}
})
}