2017-02-15 1 views
0

내 iOS 앱 (Swift 3)은 Action Extension을 사용하여 다른 앱의 중요한 이미지를 필요로합니다. 나는 표준 이미지 확장 템플릿 코드를 사용하고 있습니다.이 템플릿 코드는 iOS Mail 및 Photos와 같은 응용 프로그램에서 잘 작동합니다. 공유되는 이미지는 로컬 파일의 URL입니다. 그러나 공유되는 이미지가 실제 이미지 데이터 자체 인 특정 앱의 경우 내 액션 확장 코드가 이미지를 가져 오지 않습니다. 참고로Action Extension을 사용하여 이미지 가져 오기 - 로컬 이미지의 URL은 실제 이미지 데이터에서 작동하지만 실제 이미지에서는 작동하지 않습니다.

for item: Any in self.extensionContext!.inputItems { 
     let inputItem = item as! NSExtensionItem 
     for provider: Any in inputItem.attachments! { 

      let itemProvider = provider as! NSItemProvider 

      if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) { //we'll take any image type: gif, png, jpg, etc 

     // This is an image. We'll load it, then place it in our image view. 
     weak var weakImageView = self.imageView 
     itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil, completionHandler: { (imageURL, 

      error) in 
      OperationQueue.main.addOperation { 


       if let strongImageView = weakImageView { 


        if let imageURL = imageURL as? NSURL { 

         strongImageView.image = UIImage(data: NSData(contentsOf: imageURL as URL)! as Data) 

         let imageData = NSData(contentsOf: imageURL as URL)! as Data 
         self.gifImageView.image = UIImage.gif(data: imageData) 

         let width = strongImageView.image?.size.width 
         let height = strongImageView.image?.size.height 
         .... my custom logic 

        } 
       } 

, 나는 일들이 작동하지 않는 응용 프로그램 중 하나에 대한 개발자에게 내밀어 그는 액션 확장에 대한 이미지를 공유하는 방법에이 코드를 공유했다.

//Here is the relevant code. At this point the scaledImage variable holds a UIImage. 

var activityItems = Array<Any?>() 

if let pngData = UIImagePNGRepresentation(scaledImage) { 

    activityItems.append(pngData) 

} else { 

    activityItems.append(scaledImage) 
} 

//Then a little later it presents the share sheet: 

let activityVC = UIActivityViewController(activityItems: activityItems,applicationActivities: []) 

self.present(activityVC, animated: true, completion: nil)    

답변

0

이 게시물 덕분에 문제를 아주 잘 설명 할 수 있습니다. https://pspdfkit.com/blog/2017/action-extension/. 요약하면 공유 앱이 기존 이미지 또는 원시 이미지 데이터에 대한 URL을 제공하는지 여부는 알 수 없으므로 두 가지 경우를 모두 처리 할 수 ​​있도록 기본 액션 확장 템플릿 코드를 수정해야합니다.

for item: Any in self.extensionContext!.inputItems { 
    let inputItem = item as! NSExtensionItem 
    for provider: Any in inputItem.attachments! { 

     let itemProvider = provider as! NSItemProvider 

     if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) { //we'll take any image type: gif, png, jpg, etc 

    // This is an image. We'll load it, then place it in our image view. 
    weak var weakImageView = self.imageView 
    itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil, completionHandler: { (imageURL, 

     error) in 
     OperationQueue.main.addOperation { 


      if let strongImageView = weakImageView { 


       if let imageURL = imageURL as? NSURL { 

        strongImageView.image = UIImage(data: NSData(contentsOf: imageURL as URL)! as Data) 

        let imageData = NSData(contentsOf: imageURL as URL)! as Data 
        self.gifImageView.image = UIImage.gif(data: imageData) 

        let width = strongImageView.image?.size.width 
        let height = strongImageView.image?.size.height 
        .... my custom logic 

       } 

       else 

        guard let imageData = imageURL as? Data else { return } //can we cast to image data? 
        strongImageView_.image = UIImage(data: imageData_) 

        //custom logic 

      } 
관련 문제