2017-04-05 55 views
2

我必須一次顯示多個視圖組件,只有當顯示一個視圖時,我想顯示第二個視圖組件等等。有些組件中有動畫。所以我有這樣的代碼:Swift中的完成處理程序問題

func addFirstElement(completion: (_ success: Bool) -> Void) { 
     //code to add view element 
     completion(true) 
    } 

addFirstElement {(success) -> Void in 
      if success { 
       addSecondElement {(success) -> Void in 
        if success { 
         addThirdElement {(success) -> Void in 
          if success { 
           addForthElement {(success) -> Void in 
            if success { 
             addFifthElement() 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 

問題是我看到所有元素一次顯示,而不是一次一個顯示。 我對封閉只有部分清楚,所以我不確定我擁有的代碼是否正確。

+0

使用計時器延遲使用動畫的完成處理每一個'如果success' –

+0

它加入這樣快速,你認爲它是一次,這只是快速 –

回答

0

除非您在創建每個組件時都有一些冗長的操作,那麼當然它會看起來就像它們全都出現在一起。

如果你想看到它們按順序出現,引入一個操作,每個控制器的創建需要一些時間。

如果你想下一個控制器時,以前的動畫已經完成出現,那麼你需要前

UIView.animateWithDuration(animationDuration, animations: { 
    // animation 
    }, completion: {(finished:Bool) in 
     // load up the next view 
}) 
+0

感謝您的迴應,似乎動畫是問題。我在哪裏評論「//添加視圖元素的代碼」,對某些類型的元素具有動畫效果。所以如果第一個元素有動畫,第二個元素不是,我希望第二個元素在第一個動畫完成後出現。看起來我必須使用動畫的完成處理程序。 –