Я пытался понять это некоторое время, но безрезультатно. По сути, у меня есть массив UIImageViews, которые я хочу анимировать 1 на 1 по порядку. Сейчас они все оживляют правильно, но одновременно. Кроме того, я хочу, чтобы код внизу выполнялся только ПОСЛЕ того, как все анимации выполнены, так как сейчас он, кажется, выполняется одновременно. Я довольно новичок в Swift, так что, думаю, я не до конца понимаю, как работают циклы для ? На мой взгляд, этот код должен перебирать все изображения в массиве, и только после того, как он будет выполнен, он должен выполнить код внизу. метод 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()