iOS Share GIF (анимированное изображение) не работает
прошло почти 2 дня, что я ищу решение своей проблемы, но я не был успешным, я хочу поделиться GIF( анимированное изображение) на Facebook, Twitter, электронной почте, WhatsApp , используя "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 GIF не анимированные и его как изображение ... Я уже прочитал все вопросы Stack-overflow о такая же проблема, как этой или этой или этой но это не работает для меня.
3 ответов
пока база на днях исследований выяснила, что:
TWITTER : для обмена GIF на twitter пришлось использовать twitter API и создать составной запрос для достижения цели и его работы очень хорошо.
FACEBOOK: я поделился некоторыми GIF на Facebook, используя FACEBOOKSHAREKIT, но я не знаю, почему иногда gif анимированы, иногда нет.
INSTAGRAM: чтобы поделиться gif на Instagram пришлось конвертировать GIFS в MP4 (или любые другие видеоформаты , принятые Instagram), затем сохраните его в Camera roll, а затем поделитесь им, он немного скручен, но работает очень хорошо.
в WhatsApp: Он не поддерживает GIF вообще. ПРОЧИТАЙТЕ ОБНОВЛЕНИЕ
чтобы сделать все это, я не мог использовать "UIActivityViewController", поэтому решил создать пользовательскую страницу общего доступа. если кто-нибудь знает, что добавить здесь, чтобы помочь мне и другим, пожалуйста, скажите мне (особенно о Фейсбук.) Заранее спасибо
обновление
в WhatsApp : благодаря @AmmarShahid, как он упоминал в комментариях, Whatsapp теперь поддерживает gif.
столкнулся с подобной проблемой и много гуглил, но все же не идеальное решение, лучшее, что я придумал здесь:
используйте элемент uiactivityitemprovider и extend - (id) {} для другого типа UIActivityType:
Twitter: по умолчанию uiactivityviewcontroller Twitter share еще не поддерживает его, который он "уменьшит" его как неподвижный JPG. Однако как-то он работает для GIF меньше 100kb (протестирован в iOS 9), и я не знаю, почему. Поэтому я должен использовать SLRequest для загрузки GIF, как учили в здесь. Когда SLRequest выполнен и возвращается, отклоните UIActivityViewController. Недостатком этого является отсутствие предварительного просмотра общего листа, и пользователи больше не могут вводить собственное сообщение.
Facebook: на самом деле это намного проще! Просто загрузите GIF в Giphy, затем предоставьте URL 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 newb, поэтому некоторые эксперты, пожалуйста, исправьте меня и код, если это возможно
/ / поделиться 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];