2016-05-03 22 views
5

我已经差不多2天时间找到问题的解决方案,但我没有成功,我想在Facebook,Twitter上分享GIF(动画图像)电子邮件,WhatsApp,使用“UIActivityViewController”iOS分享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]; 

,当我在电子邮件分享它的动画和它的工作完美,但在推特,脸谱,WhatsApp的照片与图像不动画和其他具有类似图像... 我已经阅读所有关于相同问题的堆栈溢出问题如thisthisthis但它不适用于我。

回答

3

天的研究到目前为止,基地发现了:

TWITTER:对于分享在Twitter上GIF不得不使用Twitter的API,并创建一个多部分请求,要达到的目标和它工作得很好。

FACEBOOK:我做了分享使用FACEBOOKSHAREKIT在Facebook上一些GIF,但我不知道为什么有时图档是动态的,有时没有。

Instagram的:要在Instagram的分享GIF不得不转换的GIF MP4(或Instagram的接受任何其他的视频格式),然后将其保存到相机胶卷,然后分享它,这是有点扭曲,但它工作得很好。

WHATSAPP:它根本不支持GIF。

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

1

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

使用UIActivityItemProvider和扩展 - (ID)项{}针对不同UIActivityType:

Twitter:默认的UIActivityViewController Twitter共享不支持它,它将它“缩小”为静态JPG。但不知何故,它适用于GIF小于100kb(在iOS 9中测试),我不知道为什么。因此,我必须使用SLRequest上传GIF,如here中所教导的。当SLRequest完成并返回时,请关闭UIActivityViewController。缺点是没有预览份额表,用户不能再输入自己的消息。

Facebook:它实际上更容易!只要上传的GIF到Giphy,然后提供Giphy网址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的福利局所以一些专家请大家指正和代码,如果可能的

+0

您的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]; 
+1

它真的工作...? –

+0

是工作代码,,, –

+1

好的先生谢谢... –