Full Screen Cover: その概要、フルスクリーンプレゼンテーションとUIKit

著者: IT Sectr 公開日: 2026-06-09 読了時間: 5 分

Full Screen Cover はiOSにおけるモーダルプレゼンテーションのスタイルで、新しい画面が親コンテンツを見えないままディスプレイ全体を占めます。Page Sheetとは異なり、Full Screen Coverは前の画面を完全に隠し、メディアコンテンツ、写真エディタ、認証画面に使用されます。Apple Developer, 2025によると、このスタイルはiOS 13までデフォルトでしたが、イマーシブなシナリオでは侊然として優先されます。SwiftUIでは、.fullScreenCover修饰子がフルスクリーンプレゼンテーションのための宣言的なAPIを提供します。

ポイント

  • Full Screen Cover はiOSにおけるフルスクリーンモーダルプレゼンテーションで、表示中は親コンテンツを隠します。
  • UIModalPresentationStyle.fullScreen はUIKitの定数で、present呼出し時にフルスクリーンモードを設定します。
  • SwiftUI はフルスクリーンモーダルウィンドウを宣言的に作成するための.fullScreenCover修饰子を提供します。
  • Full Screen Cover は背景を完全におい、スワイプでの直感的な閉じる機能がない点でPage Sheetと異なります。
  • 使用されます ビデオプレイヤー、カメラ、写真エディタ、PDF表示、その他のイマーシブシナリオに。

iOSでのFull Screen Coverとは?

Full Screen Cover はiOSにおけるモーダルプレゼンテーションのスタイルで、呈示されたコントローラがデバイスの画面全体を占めます。親コンテンツは完全に隠され、イマーシブな効果を生み出し、ユーザーを現在のタスクに集中させます。

iOS 13以前は、Full Screen CoverがiPhoneでの唯一のモーダルプレゼンテーションスタイルでした。present(_:animated:completion:)のすべての呼出しはデフォルトで.fullScreenを使用していました。iOS 13より、Appleはデフォルトスタイルを.automaticに変更し、iPhoneでは.pageSheetが選択されるようになりました。しかし、Full Screen Coverは侊然として利用可能で、完全な集中が重要なシナリオで使用されています。

Page Sheetとは異なり、Full Screen Coverは親コンテンツとのインタラクションを許同せず、モーダルウィンドウの下に親コンテンツを表示しません。ユーザーはスワイプダウンでFull Screen Coverを閉じることはできません—閉じるにはdismiss(animated:completion:)へのプログラム的な呼出しか、画面上の閉じるボタンが必要です。UXをデザインする際には、この行動を考慮することが重要です。

Full Screen Cover vs Page Sheet: スタイル比較

Page Sheet はiOS 13で導入された第2の主要なモーダルプレゼンテーションスタイルです。Page Sheetは上部にマージンを持つカードとして表示され、その下に親画面が見えます。ユーザーはスワイプダウンでPage Sheetを閉じることができます。対してFull Screen Coverは、親コンテンツを隠し、スワイプでの閉じる機能をサポートしません。

特徴Full Screen CoverPage Sheet
背景カバー完全、親コンテンツは見えない部分的、親がカードの下に見える
スワイプで閉じるなし、プログラムまたはボタンのみあり、スワイプダウンで閉じる
一般的な用途ビデオ、カメラ、写真エディタ、PDFフォーム、設定、詳細表示
表示アニメーション下から上、フルスクリーン下から上、マージン付きカード
利用可能性iOS 2+iOS 13+

Full Screen CoverとPage Sheetの選択はコンテンツとコンテキストによります。推奨されます Full Screen Coverは完全な注意が必要なコンテンツに: フルスクリーンビデオ、写真プレビュー、書類スキャン。Page Sheetは親画面のコンテキストが重要なタスクに: 編集フォーム、オプション選択、詳細表示。

UIKitでの実装: UIModalPresentationStyle

UIKit はモーダルプレゼンテーションスタイルを設定するための定数UIModalPresentationStyle.fullScreenを提供します。presentを呼ぶ前にUIViewControllerでこのプロパティを設定すると、コントローラがフルスクリーンで表示されます。コントローラはキーボード表示時の動作も管理し、システムイベントを処理します。

設定とデリゲート

.fullScreenスタイルを設定した後、閉じるイベントを処理するためにpresentationController?.delegateを設定することをおすすめします。UIAdaptivePresentationControllerDelegateデリゲートは閉じる試行を拦戮し、データの失いを防ぐことができます。Page Sheetとは異なり、Full Screen Coverではデリゲートはプログラム的なdismiss呼出し時にのみ発火します。

ローテーションとキーボード処理

Full Screen Coverは画面のローテーションとキーボードの表示を正しく処理します。回転時、モーダルコントローラは自動的に新しい向きに適応します。UIKeyboardWillShowNotificationはキーボード表示時にコンテンツを上に移動し、テキストフィールドを見えるようにします。Page Sheetとは異なり、Full Screen Coverはキーボード表示時にサイズが変わりません。

swift
let playerVC = VideoPlayerViewController()
playerVC.modalPresentationStyle = .fullScreen
playerVC.modalTransitionStyle = .crossDissolve
present(playerVC, animated: true) {
    playerVC.startPlayback()
}

// 閉じる
dismiss(animated: true) {
    print("プレイヤーが閉じられました")
}

SwiftUI: .fullScreenCover修饰子

SwiftUI はフルスクリーンモーダルウィンドウを宣言的に作成するための修饰子.fullScreenCoverを提供します。.sheet (Page Sheet)とは異なり、.fullScreenCoverは.fullScreenスタイルを作成し、同様の動作をもちます: コンテンツを完全におい、スワイプでの閉じる機能はありません。

Bindingとデータの使い方

修饰子はBoolまたはオプショナルの識別可能なアイテムへのBindingを受け入れます。Bindingがtrueに設定されると、SwiftUIはフルスクリーンウィンドウの表示をアニメーションします。データを渡すにはonDismissパラメータとコンテンツをもつクロージャを使用します。\.dismiss環境値はモーダルウィンドウを内部から閉じることができます。

Full Screen Cover vs Sheet

SwiftUIでの.fullScreenCoverと.sheetの選択はUIKitと同樣です: .fullScreenCoverはイマーシブコンテンツ用、.sheetはカード用。SwiftUIは自動的に正しい閉じる動作を選択します: .sheetはスワイプで閉じられ、.fullScreenCoverはプログラム的にのみ閉じられます。修饰子は同じView階層で組み合わせることができます。

swift
struct CameraView: View {
    @State private var showCamera = false

    var body: some View {
        Button("カメラを開く") {
            showCamera = true
        }
        .fullScreenCover(isPresented: $showCamera) {
            CameraPreviewView()
                .ignoresSafeArea()
        }
    }
}

struct CameraPreviewView: View {
    @Environment(\.dismiss) private var dismiss

    var body: some View {
        ZStack {
            Color.black.ignoresSafeArea()
            VStack {
                Spacer()
                Button("撮影") { dismiss() }
                    .foregroundColor(.white)
            }
        }
    }
}

カスタムアニメーションとトランジション

Full Screen Cover はUIKitでのUIModalTransitionStyle、SwiftUIでのカスタムトランジションを通じてカスタムアニメーションをサポートしています。標準スタイルには以下があります: .coverVertical (下から上)、.crossDissolve (そっと表示)、.flipHorizontal (翻転)、.partialCurl (ページをんぶる効果)。

UIKit: UIViewControllerAnimatedTransitioning

完全にカスタムなアニメーションには、UIViewControllerAnimatedTransitioningプロトコルを実装します。animateTransition(using:)メソッドにより、アニメーションの期間とトランジションを定義できます。アニメーションコントローラはUINavigationControllerDelegateまたはUIViewControllerTransitioningDelegateを通じて指定されます。

SwiftUI: Matched Geometry Effect

SwiftUIでは、.fullScreenCoverのカスタムトランジションはmatchedGeometryEffectを使って作成されます。この修饰子は、要素を親Viewからフルスクリーンウィンドウへ移動させるアニメーションを行います。例えば、写真のサムネイルをタップすると、それがゆっくりとフルスクリーンに拡大され、連続性のある効果が生みます。matchedGeometryEffectは、要素をソースと目的地の位置で結びつけるidとnamespaceで動作します。

swift
struct PhotoViewer: View {
    @State private var selectedPhoto: String?
    @Namespace private var animation

    var body: some View {
        HStack {
            ForEach(["photo1", "photo2"], id: \.self) { photo in
                Image(photo)
                    .matchedGeometryEffect(id: photo, in: animation)
                    .onTapGesture { selectedPhoto = photo }
            }
        }
        .fullScreenCover(item: $selectedPhoto) { photo in
            Image(photo)
                .matchedGeometryEffect(id: photo, in: animation)
                .ignoresSafeArea()
        }
    }
}

Full Screen Coverを使うべきとき

Full Screen Cover は、コンテンツが親インターフェースにじゃまされずに画面全体を占める必要があるシナリオに推奨されます。Apple HIGは3つの主なカテゴリを示しています: メディアコンテンツ、コンテンツ作成ツール、一時的なシステムインターフェース。

メディアとエンターテインメント

ビデオプレイヤー、写真表示、PDFやコミックの読み込みは、Full Screen Coverの典型的な使い方です。iOSのAVPlayerViewControllerはランドスケープに切り替えることで自動的にフルスクリーンモードになります。Adobe Lightroomのような写真エディタは、写真ライブラリの上にフルスクリーンエディタを開きます。

コンテンツ作成ツール

カメラ、書類スキャナー、音声録音 — ユーザーの完全な注意が必要なタスク。UIImagePickerControllerはiOS 14以前はカメラにFull Screen Coverを使用していました。iOS 14より、システムのピッカーはPage Sheetを使用しますが、開発者はカスタムカメラに.fullScreenを強制できます。

避けるべきこと

Full Screen Coverを以下の用途で使用しないでください: 登録フォーム (Page Sheetが適しています)、親ページのコンテキストが重要なテキスト入力画面、モーダルウィンドウ内の順次ナビゲーション。Material Designでも、システムの戻るボタンをブロックすることを避けるよう推奨しています—iOSでは許容されますが、ユーザーがUI要素を通じて明確に閉じられるようにする必要があります。

よくある質問

iOSの.fullScreenと.overFullScreenの違いは?

.fullScreenは親コントローラを隠し、表示階層から削除します。.overFullScreenはモーダルコントローラを親の上に表示しますが、親は階層に残なり、イベントを受け続けます。overFullScreenは透明な背景やカスタムレイヤーアニメーションに便利です。

AppleはなぜデフォルトスタイルをfullScreenからpageSheetに変更したのか?

AppleはiOS 13でユーザーインタラクションを向上させるためにデフォルトスタイルを変更しました。Page Sheetは親画面のコンテキストを見ながら、スワイプでモーダルウィンドウを閉じられるため、ナビゲーションが効率的です。Full Screen Coverは、背景にじゃまされず完全な集中が必要なシナリオに残っています。

Full Screen Coverをプログラム的に閉じるには?

UIKitでは、presentingViewControllerまたはpresentedViewControllerでdismiss(animated:completion:)を呼び出します。SwiftUIでは、\.dismiss環境値を使用し、それを関数として呼び出します。親コントローラからのプログラム的な閉じるには、.fullScreenCoverに渡されたBindingをfalseに設定します。

Full Screen CoverはiPadで動作しますか?

はい、Full Screen CoverはiPadで動作します。iPadでは追加のスタイルが利用可能です: .formSheet (中央付け固定サイズのウィンドウ)、.currentContext (親コントローラ相対)。iPadでは、modalPresentationStyleが明示的に設定されていない場合、Full Screen CoverがPage Sheetとして表示されることがあります。

Full Screen Coverを閉じる際にデータの失いを防ぐには?

Page Sheetとは異なり、Full Screen Coverはスワイプで閉じられないため、データの失いはプログラム的なdismissでのみ可能です。dismiss(animated:completion:)メソッドをオーバーライドするか、閉じる前に呼ばれるUIAdaptivePresentationControllerDelegateを使用します。保存、キャンセル、画面に残るのオプションをもつUIAlertControllerを表示します。

まとめ

  • Full Screen Cover はiOSのモーダルプレゼンテーションスタイルで、親コンテンツを隠し画面全体を占めます。
  • UIKit はカスタムトランジションアニメーションとともにUIModalPresentationStyle.fullScreenでFull Screen Coverを実装します。
  • SwiftUI は滑らかなトランジションのためのmachedGeometryEffectをサポートした.fullScreenCover修饰子を提供します。
  • Full Screen はPage Sheetとは異なり、スワイプでの閉じる機能がなく、親コンテンツを完全においます。
  • 推奨されます ビデオプレイヤー、カメラ、写真エディタ、その他のイマーシブシナリオに。
  • 推奨されません 入力フォーム、設定、モーダルウィンドウ内のナビゲーションに。
  • データの失いを防ぐ 閉じる際に確認ダイアログを伴うUIAdaptivePresentationControllerDelegateを使用します。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください