ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
UICollectionView 上級編
強力な新機能を使いやすくする、UICollectionViewの新しい機能について学習します。diffableデータソースでセクションスナップショットを使用して展開、折りたたみできるアウトラインを作成する方法を説明します。また、コレクションビューでUITableViewのようなインターフェイスを作成するコンポジションレイアウトでリストを構築する方法も紹介します。セルをデキューしたりコンテンツとスタイルを構成する最新の技術についても学習します。 本セッションの前に、コンポジションレイアウトについて理解しておくことをお勧めします。詳細な情報については、WWDC19の “Advances in Collection View Layout” を視聴してください。
リソース
関連ビデオ
WWDC21
WWDC20
WWDC19
-
ダウンロード
こんにちは WWDCへようこそ “UICollectionViewの利点” ようこそ スティーブ・ブリーンです UIKitチームのエンジニアをしています この動画では iOS 14のUICollectionViewの進歩について 少しお話したいと思います 話を始める前に この動画のコンパニオンサンプルプロジェクトの 一部をご紹介します 絵文字エクスプローラーといいます このサンプルには そのデザインに多くの 興味深いコンポーネントが組み込まれています 最初のセクションには 絵文字を水平方向に スクロールするグリッドがあります これは今日のアプリケーションでは かなり一般的なデザイン要素です さて 絵文字エクスプローラーの 中央のセクションは特に斬新です 拡張可能な折りたたみ式のアウトラインです これはiOS 14で新しくなりました 最後に 最後のセクションには UITableViewのような 怪しげなデザインがありますね UICollectionViewの中央に 配置されています これが絵文字エクスプローラーです この動画全体を通して このサンプルプロジェクトを参照します UICollectionViewを構成するAPIは 3つの異なるカテゴリに 分類することができます データ レイアウト プレゼンテーションです UICollectionViewの 斬新なコンセプトの1つは コンテンツの“内容”であるデータと レンダリングする“場所”であるレイアウトとの の懸念を分離することでした この区別は UICollectionViewの 柔軟性を高めるために不可欠なものです UICollectionViewがiOS 6で 初めてリリースされたとき データはUICollectionViewDataSourceという index Pathベースのプロトコルで― 管理されていました レイアウトについては UICollectionViewLayoutという抽象クラスと UICollectionViewFlowLayoutという 具体的なサブクラスを公開していましました
そして プレゼンテーション側では 2つのビュータイプを公開しました UICollectionViewCellと UICollectionReusableViewです iOS 13では データとレイアウトにそれぞれ Diffable Data SourceとCompositional Layoutの 2つの新しいコンポーネントを導入しました これらは現在 UICollectionViewを用いて アプリケーションを構築する際に使うAPIです
iOS 14では これらの 最新のAPIをベースに構築し この3つのAPIカテゴリ全てに渡って 強化された新機能を Diffable Data SourceとCompositional Layout そしてCellに導入しました
まずは Diffable Data Sourceの 機能強化についてお話しましょう iOS 13で導入されたDiffable Data Sourceは 新しいスナップショットデータ型の追加により UI Stateの管理を大幅に簡素化します スナップショットは 一意のセクションと アイテム識別子を使用してUI State全体を カプセル化します UICollectionViewを更新する際には まず新しいスナップショットを作成し 現在のUI Stateを入力してから データソースに適用します Diffable Data Sourceは差分を計算し アニメーションを自動的に生成します 追加の作業は必要ありません このAPIの詳細については WWDC 2019の動画 WWDC2019の動画“Advances in UI Data Sources”で取り上げました この動画をチェックすることを お勧めします
iOS 14では セクションスナップショットという 新しいスナップショット型を追加しています そして その名の通り セクションスナップショットは UICollectionView内の単一セクションの データをカプセル化します この強化には2つの理由があります 第一に データソースを セクションサイズの― データの塊に構成しやすくするため
そして第二に 階層データの モデリングを可能にするためです これはiOS 14全体で見られる一般的な ビジュアルデザインである― アウトラインスタイルのUIのレンダリングを サポートするために必要となります それでは 絵文字エクスプローラーに戻り セクションスナップショットを使用して― サンプルアプリケーションの 構築方法を見てみましょう まず 水平方向にスクロールするセクションでは 単一のセクションスナップショットを使用して ここにあるコンテンツを完全にモデル化します 次に 2番目のセクションです この拡張可能で折りたたみ可能な アウトラインスタイルでは 2番目のセクションスナップショットを使用し この階層データをモデル化しています そして最後に リストのセクションでは 3番目のセクションスナップショットで この セクションのコンテンツを再びモデル化します そこで 絵文字エクスプローラーでは Diffable Data Sourceを3つの異なる セクションスナップショットに構成し それぞれが1つのセクションの コンテンツを表しています 以上が iOS 14のUICollectionViewの Diffable Data Sourceに追加された― 新しいセクションスナップショットの概要です しかし それだけではありません また 新たに並び替えAPIも追加しました これらの新しいAPIをより深く掘り下げるには “Advances in Diffable Data Sources”の動画を ご覧ください 次に iOS 14のCompositional Layoutの 進歩についてお話します Compositional Layoutは iOS 13で導入されましたが より小さくて論理のわかりやすい 少量のレイアウトを一緒に構成することで リッチで複雑なレイアウトを 構築できるようになりました Compositional Layoutが高速なのは レイアウトがどのように 動作すべきかではなく レイアウトをどのように 見せたいかを記述するからです Compositional Layoutには より洗練されたUIを構築するのに役立つ― セクション固有のレイアウト機能も 含まれています 直交にスクロールするセクションにも 対応しています Compositional Layoutの詳細については WWDC2019の動画“Advances in Collection View Layout”をご覧ください
iOS 14ではCompositional Layoutの基礎に Listsと呼ばれる新機能を加えて構築しました
Listsを使用すると UITableViewのようなセクションを 任意のUICollectionViewに追加できます そして これらのリストには スワイプアクションや 多くの一般的なセルレイアウトなど UITableViewに求めていた機能が 豊富に含まれています リストスタイルのレイアウトを 作成するのは簡単です ListsはCompositional Layout上に 構築されているので セクションごとに 他の種類のレイアウトとListsを 簡単に混在させ 一致させることができます Compositional Layoutを使って リストスタイルのレイアウトを― 簡単に作成する方法を コードスニペットで確認してみましょう
ご覧のように これはたった2行のコードで 非常にシンプルです この例では UICollectionViewレイアウトを 作成しています CollectionViewの各セクションは insetGroupedの外観を持つ リストになっています そして そのレイアウトは このような感じになります
Compositional Layoutリストの 簡単な紹介は以上です でも Listsには 他にも たくさんのことがあります 新しい具体的なUICollectionViewListCell ヘッダーとフッターのサポート そして多くのiPadOSシステムアプリケーションで 見られる新しいSidebarの外観があります 深く掘り下げたい方は 動画“Lists in UICollectionView”をご覧ください
最後にUICollectionViewと 最新のセルについて少しお話しましょう
iOS 14では セル登録という 新しいAPIを使用して セルを構成するための 真新しい方法があります セル登録は ビューモデルから セルを設定するための― シンプルで再利用可能な方法です セル登録では セルクラスやニブを登録して 再利用識別子と関連付けるという 余分な手順を省くことができます 代わりに 汎用的な登録型を使用します これは ビューモデルから 新しいセルを設定するための 設定クロージャを組み込んでいます このAPIの動作を見てみましょう まず セル登録を作成します これはセルクラス この場合は MyCellですが それとViewModelクラスにまたがる 汎用的なものです 登録でクロージャが使用されることに 注意してください これは新しいセルが構築されるたびに 呼び出されます ここでは ViewModelから セルのコンテンツを構成します セル登録を使用することで 登録を呼び出す 余分な手順が不要になりました 登録を使用して 新しいAPIの dequeueConfiguredReusableCellで Diffable Data Sourceの セルプロバイダーから セル登録を使用するだけです セル登録については以上です 次は セルコンテンツの構成です セルコンテンツの構成は― UITableViewの標準的なセル型で 見られるのと同じような セルの標準レイアウトを提供します これらの構成は任意のセル または 汎用的なUIViewで使用することができます とても柔軟性があります これらがどのように機能するか知るために いくつか視覚的な例をチェックしてみましょう ここでは とても標準的な見た目の セルレイアウトで画像とテキストを配置した― 簡単な例を見ることができます これはvalueCell変数です 2番目のテキストがセルの末尾にあります
最後に subtitleCellです この場合は2番目のテキストが メインテキストの下に表示されます
ここで注目すべきは これらの コンテンツ構成の型が非常に軽量であり コンテンツがどのように表示されるか 簡単に記述することです このフレームワークは レイアウトに関する 全ての考慮事項を処理して 自動的に最適化し パフォーマンスを向上します そして最後に背景の構成です これらはコンテンツの設定に 非常に似ていますが 色や境界線スタイルなどのプロパティを 調整する機能によって 任意のセルの背景に適用されます ここまで 最新のセル構成について ほんの少しだけ説明しました より深く掘り下げるには 動画“Modern Cell Configuration”を参照してください 以上で iOS 14のCollection Viewの 進歩に関する概要を終わります サンプルアプリケーションをダウンロードし これらのAPIの動作を見てみてください そして 私たちのコードを基礎として用い アプリケーションに機能を追加してください さらに詳しく知りたい方は 関連動画をチェックしてみてください ご視聴 ありがとうございました
-
-
6:15 - UICollectionViewCompositionalLayout Lists
let configuration = UICollectionLayoutListConfiguration(appearance: .insetGrouped) let layout = UICollectionViewCompositionalLayout.list(using: configuration)
-
7:33 - Cell Registration
// Example of using new iOS 14 cell registration let reg = UICollectionView.CellRegistration<MyCell, ViewModel> { cell, indexPath, model in // configure cell content } let dataSource = UICollectionViewDiffableDataSource<S,I>(collectionView: collectionView) { collectionView, indexPath, item -> UICollectionViewCell in return collectionView.dequeueConfiguredReusableCell(using: reg, for: indexPath, item: item) }
-
8:32 - .cell Content Configuration
var contentConfiguration = UIListContentConfiguration.cell() contentConfiguration.image = UIImage(systemName:"hammer") contentConfiguration.text = "Ready. Set. Code" cell.contentConfiguration = contentConfiguration
-
8:38 - .valueCell Content Configuration
var contentConfiguration = UIListContentConfiguration.valueCell() contentConfiguration.image = UIImage(systemName:"hammer") contentConfiguration.text = "Ready. Set. Code." contentConfiguration.secondaryText = "#WWDC20" cell.contentConfiguration = contentConfiguration
-
8:44 - .subtitleCell Content Configuration
var contentConfiguration = UIListContentConfiguration.subtitleCell() contentConfiguration.image = UIImage(systemName:"hammer") contentConfiguration.text = "Ready. Set. Code." contentConfiguration.secondaryText = "#WWDC20" cell.contentConfiguration = contentConfiguration
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。