如何与iOS共享文件?

时间:2014-10-16 22:17:13

标签: ios objective-c

所以我让我的应用程序创建了一个文件,在这种情况下它实际上是一个动画.gif文件。这个动画的.gif文件保存在设备上,随时可以使用 - 我现在要做的就是在用户点击“分享”按钮时共享此文件。

简单地说,我怎样才能做到这一点?

有没有办法告诉iOS打开共享窗口并且我正在共享图像?现在我找不到办法做到这一点,所以我正在创建一个新的 UIImage ,并在设备上创建一个动画.gif的路径,但最终将我的动画文件转换为静态图像。

再次 - 我已经创建并保存在用户设备上的动画.gif文件

任何帮助表示感谢。

编辑:为了澄清,我已经习惯了Android,我只是打算分享一个文件并弹出一个Gmail,Facebook,Twitter等等的列表......我基本上想要相当于那个,如果可能的话。

2 个答案:

答案 0 :(得分:1)

您可能需要查看UIActivityViewController文档。这将打开一张表,其中包含可在设备上共享的所有方式。见https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActivityViewController_Class/index.html#//apple_ref/doc/uid/TP40011976-CH1-SW2。您可能希望使用images或UIActivityItemSource

初始化ActivityViewController

答案 1 :(得分:0)

Facebook和Twitter不支持UIActivityViewController,仍然只使用这个有限的应用程序。现在这段代码非常有用。

- (void)uploadImageToTwitter {

ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:
                              ACAccountTypeIdentifierTwitter];

[account requestAccessToAccountsWithType:accountType options:nil
                              completion:^(BOOL granted, NSError *error)
 {
     if (granted == YES)
     {
         NSArray *arrayOfAccounts = [account
                                     accountsWithAccountType:accountType];

         if ([arrayOfAccounts count] > 0)
         {
             ACAccount *twitterAccount =
             [arrayOfAccounts lastObject];

//
// NSURL * furl = [NSURL fileURLWithPath:NSTemporaryDirectory()]; // NSURL * fileURL = [furl URLByAppendingPathComponent:@" animation.gif"];

               NSData *imageData = [NSData dataWithContentsOfURL:_GIFURL];

              NSURL *requestURL = [NSURL URLWithString:@"https://upload.twitter.com/1.1/media/upload.json"];

             SLRequest *postRequest = [SLRequest
                                       requestForServiceType:SLServiceTypeTwitter
                                       requestMethod:SLRequestMethodPOST
                                       URL:requestURL parameters:nil];

             postRequest.account = twitterAccount;

             [postRequest addMultipartData:imageData
                                  withName:@"media"
                                      type:@"image/gif"
                                  filename:@"test.gif"];

             [postRequest
              performRequestWithHandler:^(NSData *responseData,
                                          NSHTTPURLResponse *urlResponse, NSError *error)
              {


                  NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];

                  NSString *mediaID = [json objectForKey:@"media_id_string"];


                  if (mediaID!=nil) {


                      NSURL *requestURL2 = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update.json"];
                      NSDictionary *message2 = @{@"status": @"Here is the image",
                                                 @"media_ids": mediaID };

                      SLRequest *postRequest2 = [SLRequest
                                                 requestForServiceType:SLServiceTypeTwitter
                                                 requestMethod:SLRequestMethodPOST
                                                 URL:requestURL2 parameters:message2];
                      postRequest2.account = twitterAccount;

                      [postRequest2
                       performRequestWithHandler:^(NSData *responseData,
                                                   NSHTTPURLResponse *urlResponse, NSError *error)
                       {
                           // DONE!!!

                           UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Notification" message:@"Upload Twitter Account" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                           [alert show];


                       }];

                  }

              }];
         }
     }
 }];

}