2013-07-11 42 views
10

Ứng dụng của tôi cho phép người dùng chụp ảnh và thêm lớp phủ trước khi lưu.Ảnh chia sẻ iOS trên Mạng xã hội

Tôi muốn cho phép người dùng chia sẻ ảnh của mình bằng bất kỳ ứng dụng nào có thể xử lý hình ảnh (ví dụ: email, facebook, twitter ...), như Intent trên Android.

Tôi đã cố gắng sử dụng UIDocumentController, nhưng nó không hiển thị Facebook hoặc Twitter như trong thư viện chính thức. Nó cũng làm cho ứng dụng của tôi bị treo sau khi chụp bức ảnh thứ hai.

Có cách nào đơn giản để làm như vậy không? Tôi không muốn sử dụng Facebook SDK và vân vân.

Đây là những gì tôi làm khi ảnh được chụp:

[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); 
    } 

}]; 

Trả lời

13

iOS có một bộ chia sẻ xã hội sẵn có. Bạn có thể chia sẻ hình ảnh qua Email, Facebook và Twitter. Nhưng để sử dụng Google+ và các dịch vụ xã hội khác, bạn sẽ cần SDK tương ứng của họ.

1) Đối với Facebook

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

2) Đối với twitter thay thế SLServiceTypeFacebook với SLServiceTypeTwitter.

3) Đối với 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) Hãy nhớ thêm Social.Framework để dự án của bạn và tiêu đề sau đây file

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

5) Thiết lập bộ điều khiển xem của bạn khi đại biểu của

MFMailComposeViewControllerDelegate

Bỏ MailViewController lần mail send-

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

Trông tuyệt vời, cảm ơn! Không có nút được tạo sẵn để người dùng chọn? – Oyashiro

+0

nó hoạt động gần như hoàn hảo, nhưng khi tôi gửi một email nó gửi nó, nhưng bộ điều khiển không được loại bỏ bao giờ hết, có một số phương pháp để trở lại xem trước sau khi thành công? – suMi

+1

Đã chỉnh sửa câu trả lời. Điểm kiểm tra số 5. – vforvendetta

Các vấn đề liên quan