BT

FacebookのAsyncDisplayKit - iOSアプリ用のスムーズな非同期UIが特徴

| 作者: Sergio De Simone フォローする 12 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2014年11月8日. 推定読書時間: 3 分 |

原文(投稿日:2014/10/17)へのリンク

FacebookがAsyncDisplayKitオープンソースとして公開した。元々は,旧型のデバイス上でもアプリのスムーズな動作と応答性の維持を容易に保証する,同社のPaperアプリのために開発されたフレームワークだったものだ。

AsyncDisplayKitの最も大きなメリットは,Facebookによると,複雑なビュー階層を生成および描画するためのイメージおよびテキストビューを,完全にメインスレッド以外で動作させることが可能な点だ。広く知られているように,ユーザ操作が適切な扱われることを保証するには,処理をメインスレッド外に移すことが非常に重要である。さらに,処理をバックグラウンドスレッドに任せれば,マルチコアアーキテクチャのメリットを活用することも可能になる。

iOSにはGrand Central DispatchNSOperationsなど,これを行う方法がいくつも用意されている。しかしUIの主要な処理部分であるUIKitが安全に使用できるのは,相変わらずメインスレッドに限定されたままだ。

ユーザエクスペリエンスのスムーズさを保証するには,各UIの更新を数ミリ秒のみに実行するという時間的制限を満たす必要がある。UIImageViewUITextViewのようにメインスレッドのみで動作するUIKitビューでは,これを満足するのは非常に難しい。グラフィックスやテキストに関連する複雑な処理のため,それ自体のサイズ変更や表示に数十ないし数百ミリ秒を要するためだ。

この問題を解決するために,通常はCoreGraphicCoreTextなど,より低いレベルのフレームワークを使ってイメージやテキスト表示を処理する。この場合は低レベルの,ARC(Automatic Reference Counting / 自動参照カウント)に対応しないC言語APIの処理が必要になる。

AsyncDisplayKitはUIKit, CoreAnimation,CoreTextを基盤として,ASImageNodeとASTextNodeという名称の,それぞれUIImageViewとUITextViewのドロップイン・リプレースメントを提供する。さらに,メインスレッドをブロックすることなくセルノードを非同期にプリロード可能なASTableViewクラスも提供されている。

使用方法

AsyncDisplayKit階層は前述のように,バックグラウンドスレッドで初期化やレイアウトすることができる。

dispatch_async(_backgroundQueue, ^{
  ASTextNode *node = [[ASTextNode alloc] init];
  node.attributedString = [[NSAttributedString alloc] initWithString:@"hello!"
                                                          attributes:nil];
  [node measure:CGSizeMake(screenWidth, FLT_MAX)];
  node.frame = (CGRect){ CGPointZero, node.calculatedSize };

  // self.viewはnodeではないのでメインスレッドでのみ利用可能
  dispatch_sync(dispatch_get_main_queue(), ^{
    [self.view addSubview:node.view];
  });
});

この処理では,ASTextNodeオブジェクトが生成されるまで,メインスレッドがブロックされることはない。最後の部分では,メインスレッド上で通常のUIViewASTextNodeオブジェクトを追加しているが,ここからAsyncDisplayKitオブジェクトとUIKitのオブジェクトに互換性があることを確認できる。

AsyncDisplayKitのもうひとつの興味深い特徴は,layerBackedプロパティを設定することで,ビュー階層をレイヤ階層に変換可能な点だ。これにより,Core Animation APIに明示的なビューベースのコードを実装しなくても,よりパフォーマンスのよい方法に移行することが可能になる。

AsyncDisplayKitは,以前にInfoQが報告したPop以降,Facebookがオープンソースにした2つめのフレームワークである。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT