2017-04-02 73 views
3

我目前正在构建一个接受URL的共享扩展。作为这个的一部分,我定制了我的共享屏幕,如前面的问题所述,以创建一个全屏视图控制器。这一切工作正常。然而,在默认的共享作曲家视图中,我注意到网页的预览图像。我试图在我的扩展中访问这个,但我似乎无法控制它。iOS - Swift 3共享扩展预览图像

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

loadPreviewImage

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

您将在文档注意,这说的完成处理

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

但是,如果我尝试在我完成块设置这个作为一个UIImage我得到的

错误

无法将类型的价值“(UIImage的,_) - >()”到期望的参数 键入'NSItemProvider.CompletionHandler!'

其中itemProvider确认通过后卫语句是NSItemProvider的实例

itemProvider.loadPreviewImage(options: nil) { (image: UIImage, error) in  
     } 

为完成处理的文档

示例代码说将它设置为输入你想要的东西,它会试图要挟数据转换为您指定的类型。有没有人见过这个?我不知道该做什么,因为我看不到我做错了什么。

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

如果一切都失败,我会看看使用一些JavaScript来从DOM的形象,但我也喜欢预览图像,苹果似乎提供

回答

1

我不知道为什么代码在

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