如何让用户在SwiftUI for macOS中看到窗口延迟?

41zrol4v  于 2022-11-28  发布在  Swift
关注(0)|答案(3)|浏览(134)

我希望我的应用程序在SwiftUI for macOS中以几秒的延迟(如5秒延迟)向用户显示或可用,我该如何做到这一点?刚刚给出了更多信息,我希望在5秒内不向用户显示任何内容,然后窗口才能向用户可用。我还知道计时器或DispatchQueue的用例,但我不知道如何使用它们来实现这种延迟。

@main
struct test58App: App {
    var body: some Scene {
        WindowGroup {
            // Here, I want Window get shown to user with some delay like 5 sec delay!
            ContentView()
        }
    }
}
anhgbhbe

anhgbhbe1#

这将是一种可能的办法:

@main
struct test2App: App {
    @State private var visible: Bool = false
    var body: some Scene {
        WindowGroup {
            Group {
                if visible {
                    ContentView()
                }
            }
            .onAppear(perform: {
                DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
                    visible = true
                }
            })
        }
    }
}
2ul0zpep

2ul0zpep2#

进场

  • 需要显示根视图(ContentView),应用程序不能没有根视图
  • 保持ContentView为空直到5秒,然后显示您想要显示的内容

我的意见

  • 保持根视图完全为空不是一个好主意,至少显示一个微调器或一些文本,否则用户可能会认为应用程序没有响应/太慢,并杀死应用程序

代码

struct ContentView: View {
    @State private var isReady = false
    var body: some View {
        Group {
            if isReady {
                Text("Ready")
            } else {
//                Text("Not Ready")
                EmptyView()
            }
        }
        .task {
            try? await Task.sleep(nanoseconds: 5_000_000_000)
            isReady = true
        }
    }
}
jexiocij

jexiocij3#

如果你想隐藏整个窗口,这是可行的。但它可以是,窗口是可见的很短...

@main
struct test2App: App {
    
    init() {
        NSApplication.shared.hide(nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
            NSApplication.shared.unhide(nil)
            NSApplication.shared.activate(ignoringOtherApps: true)
        }
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

相关问题