Open10
VisionOSのウィンドウを最前面にしたい
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
やりたいこと
左のウィンドウをクリックして右側のウィンドウ内の情報を更新
右側のウィンドウが最前面に来てほしい
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
DispatchQueue.main.async {
// windowの中身が右側のWindowになってるか確認
print("!!!!!!!!!!!before makeKey!!!!!!!!!!!")
print(sceneDelegate.windows)
print(sceneDelegate.window)
sceneDelegate.window!.makeKeyAndVisible()
print("!!!!!!!!!!!right window!!!!!!!!!!!")
print(sceneDelegate.window)
print(sceneDelegate.window?.isKeyWindow)
sceneDelegate.window?.rootViewController?.restoresFocusAfterTransition
}
sceneDelegate.window!.makeKeyAndVisible()
makeKeyAndVisible前後でWindowが変わらない
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
これを参考にして
final class AppDelegate: NSObject, UIApplicationDelegate, ObservableObject {
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
let configuration = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role)
configuration.delegateClass = SceneDelegate.self
return configuration
}
}
final class SceneDelegate: NSObject, UIWindowSceneDelegate, ObservableObject {
var window: UIWindow?
var windows: [UIWindow]?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
window = (scene as? UIWindowScene)?.keyWindow
windows = (scene as? UIWindowScene)?.windows
}
}
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
windowsはデバッグのために作ってみただけ
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
こうしてみると,
①アプリが起動して一つ目のウィンドウが出た時
windowは一つ目のウィンドウ
②二つ目のウィンドウが出た時
windowは二つ目のウィンドウ
それ以外は前面のウィンドウを入れ替えても何も起きない
消しても何も起きない
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
課題
- ウィンドウを最前面に持ってくるメソッドはmakeKeyAndVisibleではないかもしれないので方法を探す
- ウィンドウの状態変化を監視できる場所はどこ?
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
- scene.windowsには期待するような左のウィンドウ,右のウィンドウ,という情報が入っているわけではない
![さくたま](https://res.cloudinary.com/zenn/image/fetch/s--LXVIS8rY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/6532ccb661.jpeg)
macOSで再現して動くか試してみる