【问题标题】:Give thumbnail image with UIActivityViewController使用 UIActivityViewController 提供缩略图
【发布时间】:2016-05-26 18:11:06
【问题描述】:

我正在尝试通过UIActivityViewController 分享带有文字的图像。如果我这样做:

        let activityVC = UIActivityViewController(activityItems: [text, image], applicationActivities: nil)
        self.presentViewController(activityVC, animated: true, completion: nil)

一切正常。问题是我只想与某些活动类型共享图像。即,当用户分享到 Facebook 时,我不想拥有图像,但我所做的一切都是如此。我的问题是这个愚蠢的方法永远不会被调用:

optional func activityViewController(_ activityViewController: UIActivityViewController,
       thumbnailImageForActivityType activityType: String?,
                       suggestedSize size: CGSize) -> UIImage?

这应该是因为它是在UIActivityItemSource 协议中定义的。有什么解决方法吗?


所以我相信在这方面取得了一些进展。如果您在实例化UIActivityViewController 时传递多个self 值,则可以在itemForActivityType 委托方法中返回多个值。所以如果我这样做:

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

我可以像这样返回不同的值:

func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
    if activityType == UIActivityTypePostToFacebook {
        return ["hello", "world"]
    }
    else {
        return ["goodnight", "moon"]
    }
}

但是,您似乎只能返回两个相同类型的值。

我现在的新问题是,如何同时返回图像和文本?狩猎仍在继续……

【问题讨论】:

    标签: ios swift uiactivityviewcontroller


    【解决方案1】:

    为了共享两组不同的内容,您必须创建两个不同的 itemsource

    1. 我们可以为不同的活动类型设置不同的文本内容。将 MyStringItemSource 类添加到您的视图控制器

      SourceOne:

      class MyStringItemSource: NSObject, UIActivityItemSource {
      
      @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
          return ""
      }
      
      @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
          //You can pass different text for for diffrent activity type
          if activityType == UIActivityTypePostToFacebook {
              return "String for facebook"
          }else{
              return "String for Other"
          }
        }
      }
      
    2. 我们的要求是为所有除了FB的活动类型添加图片,为此在你的VC中添加MyImageItemSource类

      来源二:

      class MyImageItemSource: NSObject, UIActivityItemSource {
      
      @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
         return ""
      }
      
      
      @objc func activityViewController(activityViewController:  UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        //This one allows us to share image ecxept UIActivityTypePostToFacebook
        if activityType == UIActivityTypePostToFacebook {
           return nil
        }
        let Image: UIImage = UIImage(data: NSData(contentsOfURL: NSURL(string: "https://pbs.twimg.com/profile_images/604644048/sign051.gif")!)!)!
            return Image
        }   
      
      }
      
    3. 现在我们已经准备好设置 UIActivityViewController 了,开始吧

      @IBAction func Test(sender: AnyObject) {
      
      let activityVC = UIActivityViewController(activityItems: [MyStringItemSource(),MyImageItemSource()] as [AnyObject], applicationActivities: nil)
      
      //Instead of using rootviewcontroller go with your own way.
      if let window = (UIApplication.sharedApplication().delegate as? AppDelegate)?.window
      {
          window.rootViewController?.presentViewController(activityVC, animated: true, completion: nil)
      }
      }
      

    TWITTER 共享对话: 包含图像和给定的文本

    FB分享对话: 仅包含给定的文本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 2015-05-17
      相关资源
      最近更新 更多