iOS无法分享GIF(动态图像)的解决方法不起作用

6
我是一位有用的助手,可以为您翻译文本。
几乎已经两天了,我一直在寻找解决我的问题的方法,但是没有成功。我想使用“UIActivityViewController”在Facebook、Twitter、电子邮件和WhatsApp上分享GIF(动画图像)。
这是我的代码:
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中,GIF图像没有动画效果,就像一张静态图片... 我已经阅读了所有关于同样问题的Stack Overflow问题,例如thisthisthis,但对我无效。
3个回答

3
迄今为止,根据调研发现以下内容:
TWITTER:在Twitter上分享GIF必须使用Twitter API并创建一个多部分请求来实现目标,并且它运行得非常好。
FACEBOOK:我使用FACEBOOKSHAREKIT在Facebook上分享了一些GIF,但我不知道为什么有时动画,有时没有。
INSTAGRAM:要在Instagram上分享gif,必须将GIF转换为MP4(或任何其他被Instagram接受的视频格式),然后将其保存到相机胶卷中,然后分享,这有点曲折,但它运行得非常好。
WHATSAPP:它根本不支持GIF。阅读更新。
为了做到这一切,我无法使用“UIActivityViewController”,因此决定创建一个自定义共享页面。如果有人对此有所了解,请告诉我(尤其是关于Facebook)。提前感谢。
更新:
WHATSAPP:感谢@AmmarShahid,在评论中提到,Whatsapp现在支持gif了。

2
WhatsApp现在支持GIF。您只需要以NSData格式传递数据。 - ammar shahid
@ammarshahid 谢谢,我已经更新了我的答案...在我写答案的时候,WhatsApp还不支持.gif。 - Sattar

1

遇到了类似的问题并进行了大量搜索,但仍然没有完美的解决方案,我找到的最好的方法是:

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

Twitter: 默认的UIActivityViewController Twitter分享还不支持它,它会将其“缩小”为静态JPG。但是在iOS 9中,某种方式下小于100kb的GIF可以正常工作,我不知道为什么。因此,我必须像这里所教授的那样使用SLRequest来上传GIF。当SLRequest完成并返回时,关闭UIActivityViewController。缺点是没有预览共享表单,用户不能再输入自己的消息。

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新手,所以如果可能,请一些专家们帮我纠正代码。


你的Facebook解决方案很好,不幸的是到目前为止这仍然是在Facebook上分享gif的唯一方式。 - Sattar

0

// 分享 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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接