2017-07-28 49 views
0
// AppDelegate.swift 

let navigationController = UINavigationController() 
self.window = UIWindow(frame: UIScreen.main.bounds) 
self.window!.rootViewController = navigationController 
self.window!.makeKeyAndVisible() 

let homeViewController = HomeViewController() 
navigationController.pushViewController(homeViewController, animated: false) 
if !isLoggedIn { 
    let authViewController = AuthViewController() 
    navigationController.present(authViewController, animated: false) 
} 

我有類似的情況。如果沒有用戶通過身份驗證,我想顯示身份驗證屏幕。上面的代碼工作,但問題是,在幾分之一秒內,我可以看到HomeViewController之前AuthViewController呈現模態沒有動畫。我怎樣才能防止呢?在沒有動畫的情況下呈現UIViewController會顯示演示者UIViewController的狀態

下面是顯示問題的GIF。

Animation

編輯:我不想使用和if/else語句。我希望HomeViewController始終位於AuthViewController下面。

回答

0

爲什麼不使用if/else模塊?

if !isLoggedIn { 
    let authViewController = AuthViewController() 
    navigationController.present(authViewController, animated: false) 
} else { 
    let homeViewController = HomeViewController() 
    navigationController.pushViewController(homeViewController, animated: false) 
} 
+0

因爲我需要HomeViewController始終在AuthViewController下面。一旦註冊,AuthViewController將被解除。當用戶註銷時,AuthViewController會呈現 – lucamegh

+0

當用戶剛登錄時,您可以呈現HomeViewController,然後關閉AuthViewController。或者您是否在展示HomeViewController之前嘗試放置if塊? – Maxime

+0

是的,我可以做到這一點,但這不是我想要達到的效果。我試圖在呈現HomeViewController之前放置if塊,但我得到相同的結局 – lucamegh

2

//的appdelegate

-(void)launchScreen{ 
    UIStoryBoard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 

     if ([[NSUserDefaults standardUserDefaults] valueForKey:USERID]) 
     { 
      // here show the Dashboard or LoggedIn Screen 
     }else{ 
      // here show the Login Screen or Authentication Screen 
     }                  
     } 
+0

我想設置HomeViewController作爲UINavigationController的根,不管 – lucamegh

+0

默認情況下,你想顯示homeViewController和內部應用程序的某個地方如果用戶想要登錄或登錄應該顯示登錄屏幕和顯示登錄狀態我是嗎? –

+0

是的,但如果沒有登錄,他們永遠不會看到HomeViewController。我只是想把它放在層次結構中。這就是爲什麼我想立即提出AuthViewController上面,如果用戶沒有登錄 – lucamegh

0

的問題可能是在完全創建您的HomeViewController您檢查用戶是否被認證了。將檢查身份驗證的代碼移到您的HomeViewController中,在viewDidLoad方法中,看看是否有所作爲。

+0

我不會讓我的視圖控制器知道對方。我正在使用[協調模式](http://khanlou.com/2015/10/coordinators-redux/),所以我不能這樣做。我提供的代碼沒有顯示,但意味着我被這種情況所約束 – lucamegh

+0

以及我的VC總是精益;)如果您確實移動了代碼,問題是否會消失?如果是這樣,至少我們知道這個bug的來源,那麼你可以將它融入到這個新的模式中:D –

+0

我提供的代碼正是我使用的代碼。它只是安排不同。我所問的可能是不可行的! – lucamegh

0

我所做的是在viewDidLoad時間爲紅色視圖控制器加載(loadNibNamed:owner:options :)我的啓動屏幕(視圖控制器)的副本並將該控制器的根視圖添加到紅色根視圖的傢伙。這樣紅色的人躲在似乎仍然是發射屏幕的背後。 (確保在viewDidLayoutSubviews時間假髮射屏幕的框架設置爲紅色的傢伙的界限。)

然後在您的登錄控制器啓動並覆蓋它後襬脫假啓動屏幕。或者,如果你永遠不會提供登錄控制器,只需對假人進行alpha淡入淡出,並將其從紅人的根視圖中移除即可。

您可能需要跟蹤第一次在其viewDidAppear:方法中出現(或其他說登錄狀態)的紅人。

相關問題