如何在 iOS 中的启动屏幕顶部显示警报视图?

How to show an alert view on the top of the launch screen in iOS?

我正在使用 LaunchScreen.storyboard 来显示启动画面,它只是一个静态图像。现在的问题是,如果不满足特定条件,我想在此初始屏幕的顶部显示警报。为此,我做了以下代码。但不幸的是,警报仅在启动画面之后显示。 如何在初始屏幕顶部显示警报? 到目前为止,这是我正在实施的以下代码,但初始屏幕不显示警报它仅在初始屏幕后显示。

    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
​
    if conditionMet
            {
                print("Condition met!")
            }
            else
            {
                
                let storyboard : UIStoryboard = UIStoryboard(name: "Launch Screen", bundle: nil)
                let launchScreenCtrler = storyboard.instantiateViewController(identifier: "LAUNCH_SCREEN")
                let alertViewFrame = CGRect(x: 100, y: 300, width: 120, height: 80)
                let newView : UIView = UIView(frame: alertViewFrame)
                launchScreenCtrler.view.addSubview(newView)
                launchScreenCtrler.view.bringSubviewToFront(newView)
  
                alert.show(launchScreenCtrler, sender: newView)
     
            }
}

启动屏幕不支持任何代码插入,它只是从界面生成器呈现的“图像”屏幕,它在应用程序本身加载之前加载。我建议使用其他一些 UIViewController,它看起来与您的 LaunchScreen 相同,并在 launchScreen 之后立即显示,在此 'standard' UIViewControler 上,您可以像往常一样执行任何您想要的代码。

您无法控制在 Launch Screen 期间可见的内容或显示的时间。

这是你应该做的 -

  1. 创建一个名为 SplashViewController 的新屏幕,其布局与 LaunchScreen.storyboard 相同。
  2. 确保此 SplashViewController 是用户在应用程序中看到的第一个屏幕。
  3. 在此屏幕中,您现在可以完全控制要执行的操作 - 显示警报、任何其他动画等。
  4. 如果您发现需要显示警报,请进入带有警报的新流程。
  5. 如果您发现不需要显示警报,您可以进入没有警报的旧流程。

首先可以在View Controller 上显示Alert 和 我认为您应该使用 UIAlertController,它是一个向用户显示警报消息的对象 以下是您可以尝试的代码,它将在 ViewController

顶部显示警报
let alert = UIAlertController(title: "Your title", message: "Your message", preferredStyle: .alert)
        let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
        alert.addAction(ok)
        DispatchQueue.main.async {
            self.present(alert, animated: true)
        }
  • 这里的 self 指的是我的 mainClass:ViewController,我必须在上面显示警报,如果我在后台或另一个线程中进行大量操作,则调度队列用于显示我的 UI UI 只能在主线程上更新。