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

标签 ios swift ios-extensions

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

具体我一直在尝试使用方法

loadPreviewImage

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

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

completion​Handler 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 Completion​Handler.

但是,如果我尝试在我的完成 block 中将其设置为 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    
        }

点击发布按钮时不调用。

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

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)")
                        }
                    }
                }
            })
        }

关于iOS - Swift 3 共享扩展预览图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43173281/

相关文章:

ios - 无法访问我的 viewController 类中常量文件中的 typedef 枚举声明函数

ios - 拒绝状态为 "Waiting For Review"的 iPhone 应用程序的二进制文件会导致什么情况?

ios - Swift - 获取移动数据当前使用情况图

ios - 没有获得 ARKit 中相机位置的 session `didUpdate`

ios - View 未扩展以匹配给定的约束

swift - 具有自动布局的 uiscrollview 的动态内容未按预期工作

ios - 如何将语音合成器静音

ios - 我在哪里设置谷歌地图 API key 在 Action 扩展,iOS Swift

ios - 如何在操作表而不是全屏模态视图中显示操作扩展?