簡體   English   中英

兩個模態呈現的視圖控制器-都關閉

[英]Two modally presented view controllers - dismiss both

在我的應用程序中,有三個視圖控制器。 白色,紅色和藍色。 White是應用程序的主視圖。

在按鈕輕擊時,白色將呈現紅色。 紅色表示藍色。 一切都很好。 藍色具有例如供用戶填寫的某種形式,然后用戶點擊藍色上的關閉。

三視圖控制器

藍色想讓用戶返回主界面,白色。 當用戶點擊“關閉”時,將運行:

@IBAction func didTapDismissBoth(sender: AnyObject) {
    let red = presentingViewController!
    let white = red.presentingViewController!
    white.dismissViewControllerAnimated(true, completion: nil)
}

紅色和藍色確實都可以消除,但是藍色立即消失 ,可以看到紅色在進行消除動畫! 啟用“慢速動畫”時,紅色閃爍會在視覺上震顫,並且在模擬器中很容易看到。

我寧願看到Blue優雅地滑出屏幕,露出White。

從藍色返回白色時,我可以防止紅色抬起丑陋的頭嗎?

通過(在IB中)將Red的表示樣式設置為“在當前上下文中”,我能夠模擬所需的效果。 這告訴UIKit保持Red的父(White)視圖不變,因此,例如,如果Red在其視圖中具有透明性,White將顯示出來。

在解雇過程中,我將“紅色”設置為完全透明,並設置藍色動畫。

@IBAction func didTapDismissBoth(sender: AnyObject) {
    let red = presentingViewController!
    let white = red.presentingViewController!
    red.view.alpha = 0 // Red presents "over current context" so white's view still exists. White's view will show through this transparent red
    red.dismissViewControllerAnimated(true, completion: { // dismiss blue, revealing transparent red & white showing through
        white.dismissViewControllerAnimated(false, completion: nil) }) // dismiss red with no animation
}

盡管這掩蓋了紅色閃爍的問題,但並不能解釋解雇動畫的過程。 意味着懷特的觀點不必要地徘徊。

我會為此放松一下。 您正在使用情節提要,為什么不利用它。 只需創建從藍色視圖控制器到白色視圖控制器的放松序列即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM