Donner une image miniature avec UIActivityViewController

J'essaie de partager une image avec du text via UIActivityViewController . Si je fais ceci:

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

Tout fonctionne bien. Le problème est que je veux seulement partager l'image avec certains types d'activités. c'est-à-dire quand un user partage avec Facebook je ne veux pas d'image, pour tout ce que je fais. Mon problème est que cette méthode stupide n'est jamais appelée:

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

Ce qui devrait être défini dans le protocole UIActivityItemSource . Y a-t-il du travail à faire?


Donc, je crois avoir fait quelques progrès ici. Si nous transmettons plusieurs valeurs de self lors de l'instanciation de UIActivityViewController vous pouvez renvoyer plusieurs valeurs dans la méthode déléguée itemForActivityType . Donc si je fais ceci:

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

Je peux returnner différentes valeurs comme ceci:

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

Cependant, il semble que vous ne pouvez returnner que deux valeurs du même type.

Ma nouvelle question est maintenant, comment pourrais-je returnner à la fois une image et un text ?? La chasse continue …

Pour partager deux sets de contenu différents, vous devez créer deux sources d'articles différentes

  1. nous pouvons définir différents contenus textuels pour différents types d'activités. Ajouter la class MySsortingngItemSource à votre viewcontroller

    SourceOne:

     class MySsortingngItemSource: NSObject, UIActivityItemSource { @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject { return "" } @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: Ssortingng) -> AnyObject? { //You can pass different text for for diffrent activity type if activityType == UIActivityTypePostToFacebook { return "Ssortingng for facebook" }else{ return "Ssortingng for Other" } } } 
  2. Notre exigence est d'append une image à tout type d'activité sauf FB , pour cela, ajoutez la class MyImageItemSource dans votre VC.

    SourceTwo:

     class MyImageItemSource: NSObject, UIActivityItemSource { @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject { return "" } @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: Ssortingng) -> AnyObject? { //This one allows us to share image ecxept UIActivityTypePostToFacebook if activityType == UIActivityTypePostToFacebook { return nil } let Image: UIImage = UIImage(data: NSData(contentsOfURL: NSURL(ssortingng: "https://pbs.twimg.com/profile_images/604644048/sign051.gif")!)!)! return Image } } 
  3. Maintenant nous sums prêts à configurer UIActivityViewController, c'est parti

     @IBAction func Test(sender: AnyObject) { let activityVC = UIActivityViewController(activityItems: [MySsortingngItemSource(),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) } } 

Dialogue partagé TWITTER: Contient une image et un text donné

entrez la description de l'image ici

Dialogue de partage FB: contient uniquement le text donné

entrez la description de l'image ici