У меня есть анимация, в которой я использую анимацию push, затем анимацию привязки, используя UIDynamicBehavior
, и затем я заканчиваю со свойством поведения:
for card in selectedCards {
removeCard(card: card)
}
private func removeCard(card: Card) {
guard let subView = cardsContainer.subviews.first(where: { ($0 as? PlayingCardView)?.card == card }) else {
return
}
if let card = subView as? PlayingCardView { card.selected = false }
let matchedCardsFrame = matchedCards.convert(matchedCards.frame, to: view)
view.addSubview(subView)
cardBehavior.addItem(subView) // here I add the push behavior
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.cardBehavior.removeItem(subView) // here I remove the push behavior
UIViewPropertyAnimator.runningPropertyAnimator(
withDuration: 0.3,
delay: 0,
options: [],
animations: {
self.cardBehavior.addSnapBehavior(subView, frame: matchedCardsFrame) // here I add the snap behavior
}, completion: { finished in
self.animator.removeAllBehaviors()
subView.frame.size = CGSize(width: matchedCardsFrame.height, height: matchedCardsFrame.width)
subView.transform = CGAffineTransform.identity.rotated(by: CGFloat.pi / 2)
subView.setNeedsDisplay()
})
}
}
По сути, приведенный выше код выполняет следующие действия:
- Добавить поведение push
- Удалить поведение push
- Добавить поведение привязки
- Удалить все поведения
- Добавить преобразование свойства
Я хочу, чтобы действие push выполнялось, а затем через секунду или около того, чтобы выполнялось поведение привязки, а после ее завершения выполнялось преобразование.Однако, если я removeAllBehaviors()
перед выполнением преобразования свойства, поведение привязки не заканчивается.Но если я оставлю поведение привязки и попытаюсь выполнить преобразование свойства, то это не будет иметь никакого эффекта, поскольку кажется, что поведение привязки действует на объект бесконечно, что приводит к разногласиям с преобразованием свойства.
Как программно сказать «завершить привязку», а затем выполнить преобразование?