2016-05-03 58 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

好的先生謝謝... –