我一直试图弄清楚这一点,但无济于事。基本上,我有一个 UIImageViews 数组,我想按顺序对它们进行 1×1 动画处理。现在,它们都正确但同时进行动画处理。此外,我希望底部的代码仅在所有动画完成后执行,因为现在它似乎是同时执行的。我对 swift 很陌生,所以我想我不完全理解for循环是如何工作的?在我看来,这段代码应该循环遍历数组中的所有图像视图,并且只有在它完成之后才应该执行底部的代码。应该在循环的每次迭代中调用 highlightCards 方法,但这似乎也没有发生。我知道阵列在移动正确的图像时正确启动。
这是代码:
playCards是一个带有卡片索引的整数数组
game.board是一个卡片对象数组(UIImageView)
highlightCards () 只突出显示当前可玩的卡片
完成块中的代码仅用于物流,我知道它工作正常
“设置新游戏”注释下的代码是所有动画完成后才应该执行的代码
for i in 0..<game.playedCards.count {
// update highlights
self.highlightCards()
// animate cards off screen
let endPoint: CGPoint = CGPoint(x: 1000, y: 250 )
UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 3, delay: 2, options: UIView.AnimationOptions.curveEaseInOut, animations: {
() -> Void in
self.game.board[self.game.playedCards[i]].center = endPoint
}, completion: {
(Bool) -> Void in
self.game.board[self.game.playedCards[i]].removed = true
self.game.board[self.game.playedCards[i]].removeFromSuperview()
self.currentCardCount = self.currentCardCount - 1
})
}
// set up next turn
game.blueTurn = !game.blueTurn
self.setBackground()
self.setSuitIndicators()
self.highlightCards()