iOS6から使えるようになった、UIActivity/UIActivityViewControllerをご存知でしょうか。(WWDC2012の資料で見かけた記憶が無く、最近存在に気付きました。)
iOS6の標準Appで見かけるようになった以下のようなアイコンベースのアクションシート画面を表示して、イメージやテキストなどをShareすることができるviewControllerです。
Image may be NSFW.
Clik here to view.
Share先は、Facebook,Twitter,Weibo, Message, Mail, Print, Pasteboard, AssignToContact, SaveToCameraRollに標準で対応しています。
渡せるデータは、各サービスによって異なりますが、おおよそ、NSString, UIImage, NSURLあたり。渡すデータ種別に応じて、対象となるShare先が自動的に選択されて表示されます。(対象データがテキストの場合は、SaveToCameraRollは表示されないなど。)
使い方は超簡単。
- (IBAction)shareButtonPressed:(id)sender { // 1. shareする素材を用意して、NSArrayにする。(複数種類のデータを一度に渡せる) NSString *shareText = @"hogehoge"; NSURL *shareURL = [NSURL URLWithString:@"http://www.apple.com"]; NSArray *activityItems = @[self.imageView.image, shareText, shareURL]; // 2. Controller生成 UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; // 第一引数にShareするデータをNSArrayで // 第二引数には、標準以外のサービスを利用したい場合に指定。 // (Share対象サービスを自作できるようで、自作したサービスを利用する場合に指定。標準サービスのみ利用の場合は、nilでOK) // 3. shareボタンを表示したくないサービスを NSArrayで用意して、指定 NSArray *excludeActivities = @[UIActivityTypePostToWeibo]; activityController.excludedActivityTypes = excludeActivities; // 4. activity処理完了時の動作 void (^completionHandler)(NSString *activityType, BOOL completed) = ^(NSString *activityType, BOOL completed){ NSLog(@"completetion handler"); // ただし、キャンセルした場合は、completedがNOでかえってくる。(Activity処理そのものの成否は解らない? }; activityController.completionHandler = completionHandler; // modalで表示 [self presentViewController:activityController animated:YES completion:^{ NSLog(@"Activity complete!!"); }]; }デモコードを以下におきました。
https://github.com/kenhama/UIActivityDemo
従来であれば、ShareKitを使うところですが、アプリのサポート対象がiOS6以上でよいならばこちらが簡単でよさげです。
追記:WWDC2012のPDFあらためてチェクしたら、ちゃんと紹介されてたorz
追記2: completion handlerを追記