我有一个UIView动画块,我想在数组中的段落上运行。
UIView.animateWithDuration(0.4, delay: 0.2, options: .CurveEaseOut, animations: {
var frame = self.textViewForPlayer.frame
frame.origin.y += 20
self.textViewForPlayer.frame = frame
}, completion: { finished in
UIView.animateWithDuration(0.4, delay: 0, options: .CurveEaseOut, animations: {
var frame = self.textViewForPlayer.frame
frame.origin.y -= 80
self.textViewForPlayer.frame = frame
}, completion: { finished in
})
}
)
textViewForPlayer = paragraphs[++currentParagraph]
奇怪的是 - 第一个块(完成前的第一个动画)在第一个段落上运行动画,但第一个完成块中的链式动画在第二个段落上运行(不知何故,“paragraph [++ currentParagraph]”是在两个动画块之间执行。
不确定这是怎么回事,增量代码是在动画本身之后,所以它看起来很奇怪,甚至可能是导致它在中间执行的错误。
答案 0 :(得分:1)
您的问题是动画和完成块在后一次调用,但animateWithDuration立即返回。
块的范围之外的所有内容都将在不考虑动画延迟或动画完成的情况下运行。
考虑将增量放在最后完成的块中。这应该会增加两个动画结束时的数字。
...,completion: { finished in
textViewForPlayer = paragraphs[++currentParagraph]
})