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];
我已经花了将近 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];