如何在Swift Xcode iOS中以编程方式延迟启动启动画面

问题描述 投票:10回答:4

我在imageimageView放了一个LaunchStoreyboard。如何以编程方式延迟图像的时间?

这是Launch Screen Guideline from Apple

以下是Launch Screen View控制器的代码:

import UIKit
class LaunshViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delay(0.4)
    }

    func delay(_ delay:Double, closure:@escaping ()->()) {
        let when = DispatchTime.now() + delay
        DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
    }
}
ios swift xcode splash-screen timedelay
4个回答
33
投票

在AppDelegate类中放入一行代码 -

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        Thread.sleep(forTimeInterval: 3.0)
        // Override point for customization after application launch.
        return true
    }

9
投票

不建议将整个应用程序设置为等待状态。如果应用程序需要在完成监视程序之前完成更多工作,则可能会因启动时间过长而终止应用程序。

相反,你可以做这样的事情来推迟发布屏幕。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController()
        window?.makeKeyAndVisible()

        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
            self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
        }
        return true
    }

8
投票

Swift 4.x

非常好的做法不要让你的应用程序入睡!

引导应用程序应该尽可能快,因此启动屏幕延迟是您不想使用的。

但是,您可以运行loop而不是睡觉,接收器处理来自所有连接输入源的数据:

这将延长发射屏幕的可见时间。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    RunLoop.current.run(until: NSDate(timeIntervalSinceNow:1) as Date)

    return true
}

1
投票

创建一个ViewController并使用NSTimer来检测延迟时间。当计时器结束时,按下第一个UIViewcontroller。

在ViewDidLoad方法中..

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fireMethod) userInfo:nil repeats:NO];


-(void)fireMethod
{
// push view controller here..
}

0
投票

绝对不应该让你的应用程序入睡,因为它可能被操作系统杀死,因为它长时间没有响应。

如果您在启动屏幕上使用静态图像,对我来说有用的是使用LaunchScreen.storyboard中的图像,然后在主控制器启动时,以模态方式呈现VC与ViewDidAppear中的背景相同的图像您的主控制器(动画设置为false)。

然后,您可以使用逻辑来了解何时关闭启动屏幕(将动画设置为false的VC中的方法解除)。

从实际的LaunchScreen转换到我的VC呈现相同的屏幕看起来让我难以察觉。

PS:可能会多次调用ViewDidAppear方法,在这种情况下,您需要使用逻辑不再在启动屏幕上显示VC。

© www.soinside.com 2019 - 2024. All rights reserved.