iOS - Swift 3 共享扩展预览图像

Tom*_*yBs 5 ios swift ios-extensions

我目前正在构建一个接受 URL 的共享扩展。作为其中的一部分,我按照上一个问题的概述自定义了我的共享屏幕,以创建一个全屏视图控制器。这一切正常。然而,在默认的共享编辑器视图中,我注意到有一个网页的预览图像。我试图在我的扩展程序中访问它,但我似乎无法掌握它。

具体来说,我一直在尝试使用该方法

loadPreviewImage

https://developer.apple.com/reference/foundation/nsitemprovider/1403925-loadpreviewimage

您会在文档中注意到,对于完成处理程序,这说明了以下内容

completion?Handler 一个完成处理程序块,用于执行结果。此块的第一个参数必须是 NSData、NSURL、UIImage(在 iOS 中)或 NSImage(在 macOS 中)类型的参数,用于接收图像数据。有关实现块的更多信息,请参阅 Completion?Handler。

但是,如果我尝试在完成块中将其设置为 UIImage,则会出现错误

无法将 '(UIImage, _) -> ()' 类型的值转换为预期的参数类型 'NSItemProvider.CompletionHandler!'

通过保护语句确认 itemProvider 是 NSItemProvider 实例的示例代码

itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in    
        }
Run Code Online (Sandbox Code Playgroud)

完成处理程序的文档说将其设置为您想要的类型,它会尝试将数据强制为您指定的类型。有没有人见过这个?我不知道在这里做什么,因为我看不到我做错了什么。

https://developer.apple.com/reference/foundation/nsitemprovider/completionhandler

如果所有其他方法都失败了,我会考虑使用一些 Javascript 从 dom 中获取图像,但我会喜欢 Apple 似乎提供的预览图像

小智 3

我不知道为什么里面的代码

\n\n
itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in    \n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

点击发布按钮时不会调用。

\n\n

我的圆形方法是将预览图像保存在方法中

\n\n
override func configurationItems() -> [Any]! {\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

作为

\n\n
let inputItem: NSExtensionItem = self.extensionContext?.inputItems[0] as! NSExtensionItem\n        let itemProvider = inputItem.attachments![0] as! NSItemProvider\nif (itemProvider.hasItemConformingToTypeIdentifier("public.url")) {\n            itemProvider.loadPreviewImage(options: nil, completionHandler: { (item, error) in // \xe7\x94\xbb\xe5\x83\x8f\xe3\x82\x92\xe5\x8f\x96\xe5\xbe\x97\xe3\x81\x99\xe3\x82\x8b\n                if let image = item as? UIImage {\n                    if let data = UIImagePNGRepresentation(image) {\n                        self.photoNSURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("preview.png") as NSURL!\n\n                        do {\n                            try data.write(to: self.photoNSURL as URL, options: .atomic)\n                        } catch {\n                            print("\\(#file)#\\(#function)(\\(#line)): error: \\(error.localizedDescription)")\n                        }\n                    }\n                }\n            })\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

  • `itemProvider.loadPreviewImage` 的项目对我来说始终为零 (5认同)