XCode 12.4 日本語化計画:Swift Tutorials
UIKit とのインターフェース
SwiftUI は、すべての Apple プラットフォームの既存の UI フレームワークとシームレスに連携します。たとえば、UIKit ビューとビューコントローラを SwiftUI ビュー内に配置したり、その逆を行うことができます。
このチュートリアルでは、注目のランドマークをホームスクリーンから変換して、UIPageViewController と UIPageControl のインスタンスを包み込む方法を示します。 UIPageViewController を使用して SwiftUI ビューの盛り上がりを表示し、状態変数と拘束を使用して、ユーザインターフェイス全体でのデータの更新を調整します。
手順に従ってこのプロジェクトをビルドするか、完成したプロジェクトをダウンロードして自分で探索してください。
25min予想される時間 | プロジェクト ファイル | Xcode 12 |
セクション 1
SwiftUI で UIKit ビューとビューコントローラを表すには、UIViewRepresentable および UIViewControllerRepresentable プロトコルに準拠する型を作成して下さい。カスタムの型は、それらが表す UIKit 型を作成および構成し、SwiftUI はそれらのライフサイクルを管理し、必要に応じて更新します。
ステップ 1
プロジェクトの Views フォルダに PageView グループを作成し、PageViewController.swift という名前の新しい Swift ファイルを追加します。 PageViewController 型が UIViewControllerRepresentable に準拠していると宣言します。
ページビューコントローラは、Page インスタンスの配列を格納しますが、これは View の型でなければなりません。これらは、ランドマーク間をスクロールするために使用するページです。
次に、UIViewControllerRepresentable プロトコルの 2 つの要件を追加します。
ステップ 2
目的とする構成で UIPageViewController を作成する makeUIViewController(context:) メソッドを追加します。
SwiftUI は、ビューを表示する準備ができたときにこのメソッドを 1 回呼び出し、その後ビューコントローラーのライフサイクルを管理します。
ステップ 3
setViewControllers(_:direction:animated:) を呼び出す updateUIViewController(_:context:) メソッドを追加して、表示用のビューコントローラを提供します。
今のところ、更新のたびに SwiftUI ビューのページをホストする UIHostingController を作成して下さい。後で、ページビューコントローラの寿命中にコントローラを 1 回だけ初期化することで、これをより効率的にできます。
続ける前に、ページとして使用する、特徴のあるカードを準備します。
ステップ 4
ダウンロードしたプロジェクトファイルの Resources ディレクトリにある画像をアプリの Asset(アセット) カタログにドラッグします。
ランドマークの特徴のある画像が存在する場合、通常の画像とは異なるサイズになります。
ステップ 5
特徴のある画像が存在する場合は、それを返す Landmark 構造体に計算されたプロパティを追加します。
ステップ 6
ランドマークの特徴ある画像を表示する FeatureCard.swift という名前の新しい SwiftUI ビューファイルを追加します。
ステップ 7
ランドマークに関するテキスト情報を画像に重ね合わせます。
次に、UIViewControllerRepresentable ビューを表示するカスタムビューを作成します。
ステップ 8
PageView.swift という名前の新しい SwiftUI ビューファイルを作成し、PageView の型を更新して、PageViewController を子ビューとして宣言します。
Xcode が Page の型を推測できないため、プレビューは失敗します。
ステップ 9
プレビュープロバイダーを更新して、必要なビューの配列を渡すと、プレビューが機能し始めます。
    PageViewController.swift
上記のリストの 7 行目を以下のように書き足します。
    PageViewController.swift
上記のリストの 14 行目を以下のように書き足します。
    PageViewController.swift
    Landmark.swift
    FeatureCard.swift
    FeatureCard.swift
    PageView.swift
    PageView.swift
セクション 1 | セクション 2 |
セクション 3 | セクション 4 |
セクション 101 | セクション 102 |
セクション 103 | セクション 104 |