image
のimageView
にLaunchStoreyboard
を入れました。プログラムで画像の時間を遅らせるにはどうすればよいですか?
これは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)
}
}
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
}
アプリケーション全体を待機状態に設定することはお勧めしません。ウォッチドッグを完了する前にアプリケーションがさらに作業を行う必要がある場合、起動に時間がかかりすぎるためにアプリケーションが強制終了される可能性があります。
代わりに、このようなことをして起動画面を遅らせることができます。
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
}
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
}
ViewControllerを作成し、NSTimerを使用して遅延時間を検出します。タイマーが終了すると、最初のUIViewcontrollerをプッシュします。
ViewDidLoadメソッド内。
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fireMethod) userInfo:nil repeats:NO];
-(void)fireMethod
{
// Push view controller here..
}
長い間応答しないためにOSによって強制終了される可能性があるため、アプリはnotスリープ状態にする必要があります。
起動画面に静的な画像を使用している場合、LaunchScreen.storyboardで画像を使用してから、メインコントローラーが起動し、メインコントローラーのViewDidAppearの背景と同じイメージでVCをモーダルモードで提示します(アニメーションセット付き) false)。
その後、ロジックを使用して、起動画面をいつ閉じるかを知ることができます(アニメーション設定がfalseのVCの(dismissメソッド) 。
actualLaunchScreenから同じ画面を表示するVCへの移行は、私には知覚できないように見えます。
[〜#〜] ps [〜#〜]:ViewDidAppearメソッドが複数回呼び出される場合があります。その場合、起動画面でVCを2回表示しないようにするロジックを使用する必要があります。