#ios #swift #core-animation
Вопрос:
Играя с UIViewPropertyAnimator, я застрял в странной проблеме.
Здесь,
let animator = UIViewPropertyAnimator(duration: 1, curve: .linear) animator.addAnimations(someAnimationBlock) animator.addCompletion{ position in switch position { case .current: print("is current") case .start: print("is start") case .end: print("is end") print(self.animator.state == .active) print(self.animator.state == .inactive) print(self.animator.state == .none) print(self.animator.state == .stopped) } } animator.startAnimation()
После выполнения этого кода это происходит в блоке завершения .end position
, но для аниматора все состояния являются ложными. Почему это происходит ?
Насколько мне известно, он должен быть в .inactive
состоянии, когда анимация была завершена естественным образом.
P. s Я был в блоке завершения, пытаясь запустить animator.startAnimation()
, и блок завершения больше не вызывался. Я узнал, что startAnimation()
работает только тогда, когда animator's
государство есть .inactive
. Итак, вот я проверил, и я не получаю никакой ценности для государства, Нужна помощь!
Комментарии:
1. Что вы получите, если
debugPrint(self.animator.state)
окажетесь в.end
?2. Он напечатает «__C. UIViewAnimatingState». Если я отладил печать(self.animator.state.rawValue), он печатает «5», согласно документации apple, UIViewAnimatingState является перечислением, соответствующим int, и имеет три случая, т. е. активный, неактивный и остановленный, значения которых независимо 0,1 и 2. Я не понимаю, почему эта печать 5, которой не должно быть.
Ответ №1:
Когда вызывается блок завершения анимации и указывается позиция .end
, анимация полностью завершена и вскоре будет удалена из представления.
Даже если вы позвоните startAnimation
еще раз, это не возымеет эффекта, потому что анимация все равно очень скоро исчезнет.
Вместо вызова startAnimation
из блока завершения вы можете создать новые анимации в представлении и запустить их.
Комментарии:
1. Скотт, моя цель такова: установить для UIViewPropertyAnimator значение isReversed = true -gt; добавить блок завершения к объекту аниматора (для установки isReversed = false при завершении анимации)
2. Скотт, мне немного неясно, что такое UIViewPropertyAnimator для некоторых моделей поведения, я был бы очень признателен, если бы вы разъяснили мне некоторые концепции. У меня, возможно, возникнет еще несколько вопросов о UIViewPropertyAnimator. Могу ли я получить ваш твиттер, чтобы я мог уведомить вас ?