📝

SwiftUIでQuick Look

2024/12/22に公開

SwiftUIではQuickLookをインポートすることでQLPreviewControllerを使わずにファイルのURLを伝えるだけでQuick Lookを実装できます

import QuickLook

struct QuickLookSample: View {
    @State var url: URL? = //URL または nil

    var body: some View {
        // View
            .quickLookPreview($url)
    }
}

複数ファイル

quickLookPreviewでは前述のような単一ファイルの表示のほかに、セットの中から最初に表示するファイルを選びユーザが簡単にファイル間を移動する実装もできます

let slides: [URL] = [/* ファイルのURL */]
@State var selected: URL? = nil

var body: some View {
    List {
        ForEach(0..<5) { i in
            Button {
                if showAllSlides {
                    selectedIn = slides[i]
                } else {
                    selected = slides[i]
                }
            } label: {
                Text(verbatim: "スライド\(i + 1)")
            }
        }
    }
    .quickLookPreview($selectedIn, in: slides)
}

複数ファイルをQuick Lookで表示したiPhoneのスクリーンショット

macOSではFinderと同様にウィンドウの上にウィンドウで表示されます
iPadOSでステージマネージャー利用時は、ファイルアプリの挙動と異なりメインウィンドウ内でモーダル表示されます
複数ファイルをQuick Lookで表示したMacのスクリーンショット

サンプル

サンプルプロジェクトを作成しました
単一と複数ファイル両方扱っています
https://github.com/yidev0/QuickLookTest

参考

https://developer.apple.com/documentation/swiftui/view/quicklookpreview(_:)

Discussion