Как я могу отложить запуск заставки программно в Swift Xcode iOS

Я поместил image в imageView в LaunchStoreyboard. Как программно отложить время изображения?

Вот Руководство по запуску экрана от 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)
    }
}

Ответы

Ответ 1

Поместите одну строку кода в класс AppDelegate -

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

Ответ 2

Не рекомендовал бы установку всего приложения в состояние ожидания. Если приложение должно выполнить больше работы, прежде чем завершить, сторожевой таймер может убить приложение, чтобы занять слишком много времени для запуска.

Вместо этого вы можете сделать что-то подобное, чтобы задержать экран запуска.

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
    }

Ответ 3

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
}

Ответ 4

Создайте ViewController и используйте NSTimer для определения времени задержки. и когда таймер заканчивается, нажмите первый UIViewcontroller.

В методе ViewDidLoad..

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


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

Ответ 5

Определенно, ваше приложение не должно не быть переведено в спящий режим, так как оно может быть убито ОС за то, что оно так долго не отвечает.

Если вы используете статическое изображение для экрана запуска, мне нужно использовать это изображение на LaunchScreen.storyboard, а затем, когда ваш главный контроллер запускается, модально представить VC с тем же изображением в качестве фона в ViewDidAppear вашего основного контроллера (с анимированным значением false).

Затем вы можете использовать свою логику, чтобы узнать, когда закрывать экран запуска (метод dismiss в VC с анимированным значением false).

Переход от фактического LaunchScreen к моему ВК, представляющему тот же экран, кажется мне незаметным.

PS: метод ViewDidAppear может вызываться более одного раза, и в этом случае вам нужно использовать логику, чтобы второй раз не отображать виртуальный канал с экраном запуска.