iOS Share GIF(动画图像)不起作用

Posted

技术标签:

【中文标题】iOS Share GIF(动画图像)不起作用【英文标题】:iOS Share GIF (animated image) not Working 【发布时间】:2016-08-28 16:07:30 【问题描述】:

我正在寻找解决问题的方法已经快 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 或 this 或 this 但它对我不起作用。

【问题讨论】:

【参考方案1】:

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

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

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

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

WHATSAPP:根本不支持 GIF。 阅读更新

要做到这一切,我无法使用 "UIActivityViewController" ,因此决定创建一个自定义共享页面。如果有人知道要在这里添加什么,以帮助我和其他人,请告诉我(尤其是关于 Facebook)。 提前致谢

更新

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

【讨论】:

whatsapp 现在支持 gif。您只需传递 nsdata 格式的数据。 @ammarshahid 谢谢,我已经更新了我的答案......当我写下答案时,whatsapp 不支持 .gif【参考方案2】:

遇到了类似的问题,google了很多,但仍然不是一个完美的解决方案,我想出的最好的在这里:

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

Twitter:默认的 UIActivityViewController Twitter 共享还不支持它,它将“缩小”它作为静止的 JPG。但是不知何故,它适用于小于 100kb 的 GIF(在 ios 9 中测试),我不知道为什么。因此,我必须按照here 中的说明使用 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 的唯一方法。【参考方案3】:

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

【讨论】:

以上是关于iOS Share GIF(动画图像)不起作用的主要内容,如果未能解决你的问题,请参考以下文章

navigator.share 文件在 iOS 14 Safari 上不起作用

为啥我在 paintComponent 中的 gif 动画不起作用?

Web Share API 在 iOS 上不起作用:Angular

在 JPanel 上为 .GIF 图像制作动画

Gif 在 React Native iOS 中不起作用

为啥我的图像动画代码不起作用?