LoginSignup
42
43

More than 5 years have passed since last update.

カスタムUIActivityの実装手順

Posted at

カスタムUIActivityの実装手順です。

サンプルコード

サンプルコードのリポジトリはこちら。

SHNakamapActivity

グループチャットサービス『ナカマップ』の 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新機能のサンプルコード/ライブラリをまとめた記事がこちら。

iOS 6 新機能のサンプルコード/ライブラリのまとめ22個

42
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
43