カスタムUIActivityの実装手順です。
##サンプルコード
サンプルコードのリポジトリはこちら。
グループチャットサービス『ナカマップ』の UIActivity です。
##実装手順
###1. アイコンを用意する
周囲を透過にする必要があります。透過にしないとどうなるか、どんな画像を用意すればよいかは、こちらの記事が画像付きでわかりやすいです。
サイズは
- 43x43
- 86x86
- 55x55
- 110x110
の4種類入れておきます。
###2. UIActivity を継承したクラスを新規作成
UIActivity を継承したクラスを新規作成します。今回はヘッダファイルは新規作成時のままとくにいじりません。
###3. UIActivityのメソッドをオーバーライド
下記を参考に、サービス/アプリに合わせてよしなにオーバーライドします。
- (NSString *)activityType {
return @"com.kayac.nakamap";
}
- (UIImage *)activityImage {
return [UIImage imageNamed:@"NakamapActivityIcon.png"];
}
- (NSString *)activityTitle {
return @"Nakamap";
}
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
for (id activityItem in activityItems) {
if ([activityItem isKindOfClass:[NSString class]]) {
return YES;
}
}
return NO;
}
- (void)prepareWithActivityItems:(NSArray *)activityItems {
for (id activityItem in activityItems) {
if ([self openNakamapWithItem:activityItem]) {
break;
}
}
}
###4. 連携処理を実装
サービス/アプリとの連携処理を実装します。サービスならAPI、アプリならURL Schemeを呼びます。(アプリ内のフレームワークとかを呼び出すUIActivityもあります)
SHNakamapActivity では、prepareWithActivityItems: で呼んでいる openNakamapWithItem: のところで、ナカマップのチャット用 URL Schemeをたたいています。
- (BOOL)openNakamapWithItem:(id)item {
NSURL *url = [NSURL URLWithString:@"nakamap://chat"];
NSString *urlStrWithItem = [NSString stringWithFormat:@"nakamap://chat?message=%@", item];
NSURL *urlWithItem = [NSURL URLWithString:urlStrWithItem];
[[UIApplication sharedApplication] openURL:urlWithItem];
return YES;
}
(上記コードは簡単化のため各種チェック処理は省いています)
以上でできあがり!
##呼び出し側の実装
参考までに、呼び出し側のコードはこんな感じです。
SHNakamapActivity *nakamapActivity = [[SHNakamapActivity alloc] init];
UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:@[@"投稿テキスト"]
applicationActivities:@[nakamapActivity]];
[self presentViewController:activityView animated:YES completion:nil];
##カスタムUIActivityをまとめたリポジトリ
Dropbox、Instagram、LINEといった著名サービスの UIActivity は、すでにちらほら Github で公開されはじめているので、それらを集めたリポジトリをつくりました。詳細は下記記事をご覧ください。
たった1行でWebサービスと連携!UIActivity のまとめリポジトリをつくりました
##その他のiOS6の機能
iOS 6 には UIActivity 以外にもイノベーティブな新機能がたくさんあります。そんな iOS6新機能のサンプルコード/ライブラリをまとめた記事がこちら。