2016-05-20 2 views
2

У нас есть две раскадровки в нашем приложении. Представление по умолчанию в раскадровке # 1 предполагает, что пользователь ранее предоставил действительные учетные данные. Если они еще не сделали этого, мы «перенаправить» на экран входа в раскадровке # 2:Swift: предотвращение мерцания при представлении экрана входа при запуске

let storyboard = UIStoryboard(name: "Authentication", bundle: nil) 
let controller = storyboard.instantiateViewControllerWithIdentifier("LoginController") as UIViewController 
presentViewController(controller, animated: true, completion: nil) 

Это работает - но есть мерцание, когда этот код работает, где вид по умолчанию на короткое время появляется до просмотра Логина бытии отображается. Как вы можете выполнить это действие без мерцания?

ответ

0

Мое предложение состоит в том, чтобы установить стартовый экран viewcontroller как rootviewcontroller приложения, пока не будет выполнен весь ваш решающий фактор. Это один из лучших способов для асинхронной работы.

2

Вместо представления LoginController вы должны установить соответствующие ViewController в RootViewController к окну в AppDelegate себя как folllows:

self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
//Check for credentials,if value available make LoginStatus as true 
if LoginStatus == true{ 
    //Change Storyboard name "Main" to your "storyboard #1" name. 
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    //Change Viecontroller name "My_Offer" to your "DefaultViewController name" name. 
    let vc = mainStoryboard.instantiateViewControllerWithIdentifier("My_Offer") as UIViewController 
    let navigationController = UINavigationController(rootViewController: vc) 
    self.window!.rootViewController = navigationController 
}else{ 
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Authentication", bundle: nil) 
    let vc = mainStoryboard.instantiateViewControllerWithIdentifier("LoginController") as UIViewController 
    let navigationController = UINavigationController(rootViewController: vc) 
    self.window!.rootViewController = navigationController 
} 
self.window!.makeKeyAndVisible() 

Это предотвратит отображение просмотра по умолчанию перед представлением LoginController.

Или

В раскадровки # 1 создать DummyViewController (UIViewController) и сделать его как InitialViewController и установить фоновое изображение (Ваш SplashScreen Image) в DummyViewController .в viewdidload проверить учетные данные, если Вы имеют значение

let storyboard = UIStoryboard(name: "storyboard #1", bundle: nil) 
let controller =  storyboard.instantiateViewControllerWithIdentifier("default view ") as UIViewController 
presentViewController(controller, animated: true, completion: nil) 

, если учетные данные не идут с данным кодом

let storyboard = UIStoryboard(name: "Authentication", bundle: nil) 
let controller = storyboard.instantiateViewControllerWithIdentifier("LoginController") as UIViewController 
presentViewController(controller, animated: true, completion: nil) 

это тоже предотвращает мерцание, но это не очень хороший способ сделать. Я предлагаю Первый способ Настройка rootviewcontroller. Это может помочь вам. Попробуйте.

Смежные вопросы