web-dev-qa-db-ja.com

Swift Xcode iOSでスプラッシュ起動画面をプログラムで遅らせるにはどうすればよいですか?

imageimageViewLaunchStoreyboardを入れました。プログラムで画像の時間を遅らせるにはどうすればよいですか?

これはAppleからの起動画面ガイドラインです。

ここに、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)
    }
}
11
Xcodian Solangi

AppDelegateクラスに1行のコードを挿入します-

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

アプリケーション全体を待機状態に設定することはお勧めしません。ウォッチドッグを完了する前にアプリケーションがさらに作業を行う必要がある場合、起動に時間がかかりすぎるためにアプリケーションが強制終了される可能性があります。

代わりに、このようなことをして起動画面を遅らせることができます。

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
    }
11
oscar

Swift 4.x

Notは、アプリケーションをスリープ状態にすることをお勧めします!

アプリの起動はできるだけ速くする必要があるため、起動画面の遅延は使用したくないものです。

ただし、sleepingの代わりに、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
}
11
yoowim

ViewControllerを作成し、NSTimerを使用して遅延時間を検出します。タイマーが終了すると、最初のUIViewcontrollerをプッシュします。

ViewDidLoadメソッド内。

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


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

長い間応答しないためにOSによって強制終了される可能性があるため、アプリはnotスリープ状態にする必要があります。

起動画面に静的な画像を使用している場合、LaunchScreen.storyboardで画像を使用してから、メインコントローラーが起動し、メインコントローラーのViewDidAppearの背景と同じイメージでVCをモーダルモードで提示します(アニメーションセット付き) false)。

その後、ロジックを使用して、起動画面をいつ閉じるかを知ることができます(アニメーション設定がfalseのVCの(dismissメソッド) 。

actualLaunchScreenから同じ画面を表示するVCへの移行は、私には知覚できないように見えます。

[〜#〜] ps [〜#〜]ViewDidAppearメソッドが複数回呼び出される場合があります。その場合、起動画面でVCを2回表示しないようにするロジックを使用する必要があります。

0
raulmf9325