在Swift中使用for循环动态创建UIButtons

时间:2016-11-28 20:05:16

标签: ios swift for-loop

我正在尝试在按下另一个按钮后动态地将按钮添加到滚动视图。

我创建了一个自定义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)
                })
            }

我想使用简单的动画添加这些commentView。但是只有最后一个commentView正确添加到scrollView,而上面的视图添加如下:

enter image description here

仅显示commentView的背景,而其他元素不可见。

有没有人知道我可能会缺少什么?使用for循环添加视图应该不复杂,因为我之前已经多次这样做了,但这次我似乎错过了什么?

提前谢谢!

1 个答案:

答案 0 :(得分: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()
                      }
    })