2013-07-11 13 views
10

La mia app consente di scattare una foto e aggiungere una sovrapposizione prima di salvarla.Immagine di condivisione iOS sui social network

Mi piacerebbe che l'utente condividesse la sua immagine usando qualsiasi app in grado di gestire le immagini (ad esempio: e-mail, facebook, twitter ...), come un intento su Android.

Ho provato a utilizzare UIDocumentController, ma non mostra Facebook o Twitter come fa nella galleria ufficiale. Inoltre, la mia app si arresta in modo anomalo dopo aver scattato la seconda foto.

C'è un modo semplice per farlo? Non voglio usare l'SDK di Facebook e così via.

Ecco quello che faccio quando l'immagine viene ripresa:

[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: 
^(CMSampleBufferRef imageSampleBuffer, NSError *error) { 

    if(!error){ 
     //Resize the picture and add the overlay 
     UIImage *picture = [self imageFromSampleBuffer:imageSampleBuffer]; 
     //Custom code letting me save the picture in a specific album 
     [self.library saveImage:picture toAlbum:@"myApp" metadata:metadata withCompletionBlock:^(NSError *error,NSURL* assetURL) { 
      if (error!=nil) { 
       NSLog(@"Big error: %@", [error description]); 
      } else { 
       NSLog(@"Image Saved"); 

       NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"tmp.jpg"]; 
       //Only way to use UIDocumentController is to save the file at a known location 
       NSData* imagedata = UIImageJPEGRepresentation(picture, 0.9f); 
       [imagedata writeToFile:path atomically:NO]; 
       NSLog(@"%@",path); 
       docController.URL = [NSURL fileURLWithPath:path]; 
       // This make my app crash after the second picture 
       [docController presentPreviewAnimated:YES]; 
      } 
     }]; 

    } else { 
     NSLog(@"%@",error); 
    } 

}]; 

risposta

13

iOS ha un kit integrato di condivisione sociale. È possibile condividere immagini via e-mail, Facebook e Twitter. Ma per usare Google+ e altri servizi sociali avrai bisogno dei loro rispettivi SDK.

1) Per Facebook

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 
    [controller setInitialText:message]; 
    [controller addImage:image]; 
    [self presentViewController:controller animated:YES completion:Nil]; 

2) a Twitter sostituire SLServiceTypeFacebook con SLServiceTypeTwitter.

3) Per Email

MFMailComposeViewController *emailShareController = [[MFMailComposeViewController alloc] init]; 
    emailShareController.mailComposeDelegate = self; 
    [emailShareController setSubject:@"Share Image"]; 
    [emailShareController setMessageBody:message isHTML:NO]; 
    [emailShareController addAttachmentData:UIImageJPEGRepresentation(image, 1) mimeType:@"image/jpeg" fileName:@"your_image.jpeg"]; 
    if (emailShareController) [self presentViewController:emailShareController animated:YES completion:nil]; 

4) Ricordarsi di aggiungere Social.Framework al progetto e la seguente intestazione file

#import <MessageUI/MFMailComposeViewController.h> 
#import <Social/Social.h> 
#import <MobileCoreServices/MobileCoreServices.h> 

5) Impostare il controller della vista, come delegato del

MFMailComposeViewControllerDelegate

Congeda MailViewController una volta posta è della mandata

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

sembra grande, grazie! Non esiste un pulsante predefinito per consentire all'utente di scegliere? – Oyashiro

+0

funziona quasi alla perfezione, ma quando invio una mail la invia ma il controller non viene mai eliminato, c'è qualche metodo per tornare alla visualizzazione precedente dopo il successo? – suMi

+1

Modificata la risposta. Punto di controllo n. 5. – vforvendetta

Problemi correlati