iOS 无法共享 GIF(动画图像)

iOS Share GIF (animated image) not Working

我已经花了将近 2 天的时间寻找解决问题的方法,但没有成功,我想在 Facebook、Twitter、电子邮件、WhatsApp 上分享 GIF(动画图像),使用 "UIActivityViewController".

这是我的代码:

NSURL *imagePath = [NSURL URLWithString:@"http://sth.gif"];
NSData *animatedGif = [NSData dataWithContentsOfURL:imagePath];

NSArray *sharingItems = [NSArray arrayWithObjects: animatedGif,stringToShare, nil];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];

当我在电子邮件中分享它的动画并且它的工作完美时,但是在 Twitter , Facebook ,whatsApp Gifs 不是动画并且它像一个图像...... 我已经阅读了所有关于相同问题的 Stack-overflow 问题,例如 this or this or this 但它对我不起作用。

到目前为止,根据几天的研究发现:

TWITTER : 要在 twitter 上分享 GIF 必须使用 twitter API 并创建一个多部分请求来实现目标并且效果很好。

FACEBOOK : 我确实使用 FACEBOOKSHAREKIT 在 Facebook 上分享了一些 GIF,但我不知道为什么有时 Gif 是动画的,有时没有。

INSTAGRAM : 要在 Instagram 上分享 gif 必须将 GIFS 转换为 MP4(或 Instagram 接受的任何其他视频格式)然后将其保存到相机胶卷中然后分享它,它是有点扭曲,但效果很好。

WHATSAPP : 完全不支持GIF。 阅读更新

要完成所有这些我无法使用 "UIActivityViewController" ,因此决定创建一个自定义共享页面。如果有人知道要在此处添加一些内容以帮助我和其他人,请告诉我(尤其是关于 Facebook 的)。 提前致谢

更新

WHATSAPP :感谢@AmmarShahid,正如他在评论中提到的,Whatsapp 现在支持 gif。

遇到了类似的问题,google了很多,但还是没有完美的解决方案,我想出的最好的是:

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

Twitter:默认的 UIActivityViewController Twitter 共享尚不支持它,它将 "scale down" 将其作为静态 JPG。然而不知何故它适用于小于 100kb 的 GIF(在 iOS 9 中测试),我不知道为什么。因此,我必须按照 here 中的教导使用 SLRequest 上传 GIF。当 SLRequest 完成并且 return 时,关闭 UIActivityViewController。缺点是没有预览共享 sheet 并且用户无法再键入自己的消息。

Facebook:其实简单多了!只需将 GIF 上传到 Giphy,然后将 Giphy URL 提供给 UIActivityViewController 而不是文件内容,Facebook 将识别它并显示动画 GIF

- (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];