2016-11-28 334 views
0

我想在按下另一個按鈕之後動態地將按鈕添加到滾動視圖中。在Swift中動態地使用for循環創建UIButton

我創建了一個自定義UIView,我想添加到滾動視圖。

下面你可以找到如何我試圖做到這一點的代碼:

var buttonY: CGFloat = 0 // our Starting Offset, could be 0 
      for _ in audioCommentsArray { 
       UIView.animateWithDuration(0.15, animations: { 

        let commentView = AudioCommentView(frame: CGRectZero) 
        commentView.frame = CGRect(x: 0, y: buttonY, width: 75, height: 75) 

        buttonY = buttonY + 75 // we are going to space these UIButtons 75px apart 

        commentView.alpha = 1.0 

        audioCommentsListScrollView.addSubview(commentView) 
       }) 
      } 

我想用一個簡單的動畫添加這些評論查看的。然而只有最後評論查看被正確地添加到滾動視圖,而上述的觀點中加入這樣的:

enter image description here

只有評論查看的背景中示出,而其它元件不可見。

有沒有人有一個想法,我可能會失蹤?使用for循環添加視圖不應該很複雜,因爲之前我已經做過很多次了,但是這次我似乎錯過了某些東西?

預先感謝您!

+0

我想了解爲什麼你循環UIView動畫,你沒有先使用關鍵幀動畫。你是否打算在0.15秒後顯示一個視圖和下一個視圖? – gwinyai

+0

是的,這是UIView動畫背後的想法@gwinyai – Granit

回答

1

當你在循環中處理它們時,UIView動畫重疊並相互干擾。相反,你應該將它們鏈接起來,以便下一個動畫不會干擾其他動畫。刪除循環。然後在完成處理程序中一個接一個地調用動畫。你可以遞歸地調用它以確保每個按鈕都是動畫的。

var count = 0 

    func startButtonsAnimation() { 

    UIView.animateWithDuration(0.15, animations: { 

       let commentView = AudioCommentView(frame: CGRectZero) 
       commentView.frame = CGRect(x: 0, y: buttonY, width: 75, height: 75) 

       buttonY = buttonY + 75 // we are going to space these UIButtons 75px apart 

       commentView.alpha = 1.0 

       audioCommentsListScrollView.addSubview(commentView) 
      }, completion: { (value: Bool) in 
         if self.count < self.audioCommentsArray.count { 
          self.count += 1 
          self.startButtonsAnimation() 
         } 
    }) 
+0

如果我想靜態添加按鈕,您的解決方案似乎工作,但我如何鏈接它們取決於我最初在我的audioCommentsArray中有多少元素? @gwinyai – Granit

+0

對不起。我忘了那個。我已將代碼添加到函數中。每個動畫都被鏈接,但下一個被遞歸調用,並且它會一直繼續,直到count與audioCommentsArray中的元素數量相等。 – gwinyai

+0

非常感謝!這解決了我的問題:D – Granit