У меня есть UIDynamicAnimator свойство определено:UIDynamicAnimator, removeAllBehaviors() не работает в первый раз
lazy fileprivate var animator: UIDynamicAnimator = {
return UIDynamicAnimator(referenceView: self)
}()
самость подкласс от UIView;
В расширения собственного класса, тот же файл, у меня есть логика с анимацией, которая использует мой аниматор, добавляет UIDynamicBehavior пункты:
let pushBehavior = UIPushBehavior(items: [stampView], mode: .continuous)
//some settings
let dynamicItemBehavior = UIDynamicItemBehavior(items: [stampView])
//some settings
let gravityBehavior = UIGravityBehavior(items: [stampView])
//some settings
let collisionBehavior = UICollisionBehavior(items: [stampView])
//some settings
Все работает отлично, но когда я пытаюсь остановить все анимации с removeAllBehaviors() анимации останавливаются, но поведение все еще остается в аниматоре. Второй раз, когда я его называю, массив становится пустым.
// ======
Для моей pushBehavior добавить действие, которое изменяет вар, указано, что я могу достичь точки назначения:
pushBehavior.action = { [unowned stampView] in
if stampView.center.x <= endPosition.x {
lastJump = true
}
}
В методе делегата collisionBehavior проверить эту переменную и попытаться остановить анимацию с removeAllBehaviors()
public func collisionBehavior(_ behavior: UICollisionBehavior, beganContactFor item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?, at p: CGPoint) {
if lastJump {
//animator.behaviors.count = 4
animator.removeAllBehaviors()
//still, animator.behaviors.count = 4
}
}
Вы показываете абсолютно неверный код! Я не вижу 'removeAllBehaviors' в любом месте вашего кода. Пожалуйста, покажите код _that_ и покажите, как вы знаете, что поведение не удаляется. – matt
@matt теперь лучше? –
Да, теперь я могу ответить. – matt