web-dev-qa-db-de.com

Wie kann ich den Startbildschirm für Begrüßungen in Swift Xcode iOS programmatisch verzögern?

Ich habe eine imagein imageView in LaunchStoreyboard eingefügt. Wie kann ich die Bildzeit programmatisch verzögern? Jede Hilfe wird sehr wertvoll sein.

Hier ist die Launch Screen Guideline von Apple

Hier ist der Code für Launch Screen View Controller 

 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)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}
6
Xcodian Solangi

Fügen Sie eine Codezeile in die AppDelegate-Klasse ein. 

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

Ich würde nicht empfehlen, die gesamte Anwendung in einen Wartezustand zu setzen. Wenn die Anwendung vor dem Beenden mehr Arbeit ausführen muss, kann der Watchdog die Anwendung abbrechen, da der Start zu lange dauert.

Stattdessen könnten Sie so etwas tun, um den Startbildschirm zu verzögern.

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
oscar

Swift 4.x

Es istSEHRgute PraxisNICHTIhre Anwendung in den Schlaf zu versetzen!

Das Booten Ihrer App sollte so schnell wie möglich sein. Daher ist die Verzögerung beim Starten des Bildschirms etwas, das Sie nicht verwenden möchten.

Anstelle von sleeping können Sie jedoch eine loop ausführen, während der Empfänger Daten aus allen angeschlossenen Eingangsquellen verarbeitet:

Dies verlängert die Sichtbarkeitszeit des Startbildschirms.

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
yoowim

Erstellen Sie einen ViewController und verwenden Sie NSTimer, um die Verzögerungszeit zu ermitteln. und wenn der Timer endet Drücken Sie den ersten UIViewcontroller.

In ViewDidLoad-Methode ..

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


-(void)fireMethod
{
// Push view controller here..
}
1
Saranjith

Auf jeden Fall sollte Ihre App nicht in den Ruhezustand versetzt werden, da sie möglicherweise vom Betriebssystem getötet wird, weil sie so lange nicht reagiert.

Wenn Sie ein statisches Image für Ihren Startbildschirm verwenden, funktioniert es für mich, das Image im LaunchScreen.storyboard zu verwenden und dann, wenn Ihr Hauptcontroller gestartet wird, modal ein VC mit demselben Bild wie der Hintergrund im ViewDidAppear Ihres Hauptcontrollers (mit animiertem Wert auf false).

Sie können dann anhand Ihrer Logik ermitteln, wann der Startbildschirm geschlossen werden muss (dismiss -Methode in VC mit animiertem Wert false).

Der Übergang vom tatsächlichen LaunchScreen zu meinem VC, der denselben Bildschirm anzeigt, erscheint mir nicht wahrnehmbar.

PS : Die ViewDidAppear -Methode kann mehrmals aufgerufen werden. In diesem Fall müssen Sie Logik verwenden, um das VC mit dem Startbildschirm ein zweites Mal.

0
raulmf9325