2017-04-02 41 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)") 
         } 
        } 
       } 
      }) 
     }