AsyncDisplayKitの紹介:iOS上でスムーズで応答性の高いアプリのために-Facebook Engineering

あなたは今まであなたがスクロールして周りにスワイプするように吃音アプリ ボタンをタップし、それが反応しようとすると、インターフェイス全体の凍結を見ましたか? iOSは、そのユーザーエクスペリエンス品質のバーのためによく知られていますが、そのバーを満たすことは、特に古いiphoneやipad上で、困難な場合があります。 洗練されたアプリは、通常、インターフェイスを流動的に保つために断片的なパフォーマンスの最適化を使用し、さまざまな原因の遅さを別の問題と 今日、私たちはオープンソースのAsyncDisplayKit、あなたのアプリをスムーズかつ応答性を維持するための総合的な方法を提供するフレームワークです。

AsyncDisplayKit

iOSユーザーインターフェイス機能—画面への描画、タッチイベントへの応答、慣性スクロールの物理シミュレーションの実行 アプリが毎秒60フレームのゴールドスタンダードを維持するためには、一度にミリ秒のメインスレッドのみを使用できます。 しかし、UIImageViewやUITextViewのようなメインスレッドのみのUIKitビューは、サイズを設定して表示するのに数十から数百ミリ秒かかることがあります。 また、メインスレッドが画像をデコードしたり、テキストをレンダリングしたりしている間は、ユーザー入力に応答したり、スクロー

標準のUIKitビューを使用すると速度が低下する可能性があるため、パフォーマンスの高いアプリは個々のUIKitコンポーネントの回避策を持つ傾向があります。 UIImageView自体に高価な作業をさせる代わりに、Core Graphicsを手動で使用してバックグラウンドでJpegとPngを解凍することができます; UITextViewを使用する代わりに、Core Textで直接動作する場合があります。 このアプローチは効果的ですが、制限があります—個々の回避策は異なる動作をする傾向があり、より高いレベルの改善とアプリケーションの動作を推論す

AsyncDisplayKitはUIKitとCore Animationに基づいて構築され、一般的なソリューションを提供します。 その画像とテキストビューは、この一般的なタスクのためのドロップインソリューションを提供し、メインスレッドをブロックすることなく使用す さらに重要なのは、複雑なビュー階層の作成とレンダリングを同じ方法で非同期にサポートすることです。

ノードの紹介

AsyncDisplayKitノードはuiviewのスレッドセーフな抽象化であり、CALayerの抽象化です。

ビューの使い方を知っていれば、ノードの使い方を知っています。 ASImageNodeとText Kitを搭載したASTextNodeは、UIKitの対応するものと同じように使用できます。 UIKitビュー階層とは異なり、コンテンツの画面全体のノード階層を初期化してバックグラウンドスレッドにレイアウトすることができ、ノードは現在のすべてのiOSデバイスでマルチコアCpuを利用することが容易になります。

ノードにはビューよりも多くの利点があります。 たとえば、多くの場合、ビューをレイヤーに置き換えることでパフォーマンスを向上させることができます。 残念ながら、そうするには、ビューベースのコードを別のAPIに移植する面倒なプロセスが必要であり、必然的に退行の危険があります。 ノードを使用すると、次のように簡単です。

後でレイヤーからビューに戻す必要がある場合は、1行の変更です! これは変革の違いです。 レイヤーバックアップされたUIコードに注意する代わりに、タッチ処理が必要ないときはいつでもデフォルトで使用できます。

はじめに

AsyncDisplayKitは堅牢で、アプリで使用する準備ができています。 私たちはもともとPaperの非常に触覚的なユーザーインターフェースを可能にするためにそれを構築しました、そしてそれはPop animation engineと手を携えて行きます、しかしそれはUIKit Dynamicsと従来のアプリデザインと同じように強力です。 私たちはあなたがそれで作成するものを見るのを待つことができません。

詳細については、ガイドまたはNSLondon talkをチェックしてください。 AsyncDisplayKitはGitHubで利用可能です。

コメントを残す

メールアドレスが公開されることはありません。