2016-04-29 10 views
0

私はこのアプリがバックグラウンドから復帰したとき、または2回目に起動されたとき、そしてその後に続くすべてのときにパスコード画面を表示します。SwiftのバックグラウンドでいつかUIViewControllerを表示するには?

しかし、アプリがバックグラウンドで少なくとも30秒以上、それ以上でない場合にのみ表示する必要があります。

どうすればいいですか?

私は現在パスコード画面がAppDelegate.swiftであるロードする必要コード:

func applicationDidBecomeActive(application: UIApplication) { 
    //Load lock screen 
    let topController = self.topViewControllerWithRootViewController(UIApplication.sharedApplication().delegate?.window??.rootViewController) 

    let userDefaults = NSUserDefaults.standardUserDefaults() 
    let displayedWalkthrough = userDefaults.boolForKey("Walk") 

    if displayedWalkthrough { 
     let main : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let lockVC = main.instantiateViewControllerWithIdentifier("LockVC") as! LockVC 
     topController.presentViewController(lockVC, animated: true, completion: nil) 

    } else { 
    } 
} 

答えて

0

あなたの最善の策は、バックグラウンドタスクを作成し、applicationDidBecomeActive()に読ん30秒後にフラグを設定することです。 beginBackgroundTaskWithExpirationHandlerhereを使用する必要があります。例えば(taskグローバルを作る):起動時に

func applicationDidEnterBackground(application: UIApplication) { 
    task = application.beginBackgroundTaskWithExpirationHandler({}) 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(30 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { 
     NSUserDefaults.standardUserDefaults.setBool(true, forKey: "lock") 
    } 
    application.endBackgroundTask(task) 
} 

:バックグラウンドに入ると

func applicationDidBecomeActive(application: UIApplication) { 
    if NSNSUserDefaults.standardUserDefaults.boolForKey("lock") { 
     // show lock 
    } 
    application.endBackgroundTask(task) 
    NSUserDefaults.standardUserDefaults.setBool(true, forKey: "lock") 
    // rest of your code 
} 
関連する問題