Анимация Swift Dynamic и аниматор свойств

У меня есть анимация, где я использую анимацию нажатия, а затем анимацию с использованием 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, затем через секунду или около того, чтобы поведение привязки выполнялось, а после завершения выполнения привязки выполняло преобразование. Тем не менее, если я removeAllBehaviors() перед выполнением преобразования свойства поведение привязки не заканчивается. Но если я оставлю поведение привязки и попытаюсь выполнить преобразование свойства, то это не будет иметь никакого эффекта, поскольку кажется, что поведение привязки действует на объект бесконечно, что приводит к разногласиям с преобразованием свойства.

Как я могу программно сказать закончить поведение привязки и затем выполнить преобразование?

0 ответов

Другие вопросы по тегам