iOS6から導入されたUIActivityViewControllerでShareKitいらず

iOS6から導入されたUIActivityViewControllerでShareKitいらずiOS6から使えるようになった、UIActivity/UIActivityViewControllerをご存知でしょうか。(WWDC2012の資料で見かけた記憶が無く、最近存在に気付きました。)
iOS6の標準Appで見かけるようになった以下のようなアイコンベースのアクションシート画面を表示して、イメージやテキストなどをShareすることができるviewControllerです。



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を追記


Comments are closed.