Loading
BLOG 開発者ブログ

2024年11月11日

WindowGroupから新しいWindowGroupを生成する方法


こんにちは。
モバイルソリューショングループのyoshino.kです。
このブログ記事では、ボタンタップ時に新規のWindowGroupを生成する方法について解説します。

イントロ

Apple Vision Proのアプリケーション開発では、SwiftUIを使用してユーザーインターフェースを構築します。
WindowGroupは、アプリケーションのウィンドウを管理するための基本的なコンテナです。
新しいWindowGroupを生成することで、複数のウィンドウを持つアプリケーションを作成できます。

WindowGroupの定義

基本的なWindowGroupは以下のように定義できます。

import SwiftUI

@main
struct WindowApp: App {
    var body: some Scene {
        WindowGroup(id: "newWindowGroupe") {
            ContentView()
        }
    }
}

このコードは、ContentViewを表示する単一のウィンドウを持つアプリケーションを定義しています。

新規のWindowGroupを生成する

ここから新規のWindowGroupを作成する準備に入ります。
まず、新しいWindowを生成するボタンを作成します。
ここでは、”newWindowGroup”というIDを持つWindowGroupを呼び出す設定にしています。

import SwiftUI

struct CreateWindowButton: View {
    @Environment(\.openWindow) private var openWindow

    var body: some View {
        Button(action: {
            // ボタンが押されたときの処理
            openWindow(id: "newWindowGroup")
        }) {
            Text("WindowGroupを追加")
                .bold()
                .font(.system(size: 28))
                .foregroundColor(.black)
                .padding()
        }
    }
}

次に、ボタンタップ時に生成されるWindowを設定します。
表示したいWindowGroupには、ボタンと同じIDを設定します。

import SwiftUI

@main
struct WindowApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        // ボタンタップ時に表示したいWindowGroup
        WindowGroup(id: "newWindowGroup") {
            Text("Hello, World!")
        }
    }
}

最後に、ContentViewの中に、新しいWindowGroupを生成するボタンを配置します。

import SwiftUI

struct ContentView: View {
    var body: some View {
        CreateWindowButton()
    }
}

まとめ

このようにして、ボタンタップ時に新しいWindowGroupを生成することができます。
これにより、ユーザーは複数のウィンドウを操作できるようになり、よりリッチな体験を提供することが可能です。

ぜひ、この手法を試してみてください。

yoshinokのブログ