用UIActivityViewController给缩略图图像

我试图通过UIActivityViewController与文本共享图像。 如果我这样做:

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

一切工作正常。 问题是我只想分享某些活动types的图片。 即当用户分享到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"] } } 

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

我的新问题是现在,我将如何返回一个图像和文字? 狩猎继续…

为了分享两套不同的内容,你必须创build两个不同的项目源

  1. 我们可以为不同的活动types设置不同的文本内容。将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之外的所有活动types,以便在VC中添加MyImageItemSource类

    SourceTwo:

     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分享对话:只包含给定的文本

在这里输入图像说明