2015-04-24 3 views
19

С тех пор как я обновил свое устройство до iOS 8.3, я не смог получить интерактивный переход к завершению.iOS 8.3 - Интерактивные переходы игнорируют блок завершения анимации UIView?

Оказывается, что, когда я называю cancelInteractiveTransition() или finishInteractiveTransition(), тем completion блок в блоке completion аниматора, который содержит строку:

transitionContext.completeTransition(!transitionContext.transitionWasCancelled()) 

не вызывается вообще большую часть времени. Это заставляет все приложение перестать реагировать на события касания и вращения.

Я использую подкласс UIPercentDrivenInteractiveTransition. cancelInteractiveTransition() и finishInteractiveTransition() вызывается, когда его распознающий распознавание жеста находится в состоянии .Ended или .Cancelled.

Это ошибка в iOS 8.3 (так как эта проблема произошла со мной после 8.3), или я делаю это неправильно?

+0

У меня возникла эта проблема. Немного дополнительной информации, которую я нашел эмпирически, является то, что эта проблема возникает только тогда, когда пользователь выполняет очень быстрый жест. Если он медленный, вызывается блок завершения * *. Я также узнал, что после того, как блок завершения * не будет вызван, он никогда не будет снова вызван на будущие жесты (независимо от медленного или быстрого). Тем не менее, фактический блок анимации называется тонким. – JVillella

+0

Вы проверили загрузку процессора, когда приложение перестало реагировать на события касания? Может быть, в главном потоке выполняется бесконечный цикл. – jkr

+0

Когда я диагностировал эту проблему, я заметил, что смена жестов и прекращение государственных событий происходили до того, как «animateTransition» даже побежал. Так или иначе, «animateTransition» происходит позже, чем можно было подумать. Таким образом, анимация была отменена/закончена до ее начала! Когда я использовал некоторые [kludgy GCD ловкость руки] (http://stackoverflow.com/a/31497876/1271826), чтобы убедиться, что обновления '.Changed' и' .Ended' 'UIPercentDrivenInteractionTransition' не произошли пока не вызывается 'animationDuration', и похоже, что все в порядке. – Rob

ответ

1

Попытка переопределить animationDidStop и вызвать его оттуда

override func animationDidStop(anim: CAAnimation!, finished flag: Bool) { 
    self.transitionContext?.completeTransition(!self.transitionContext!.transitionWasCancelled()) 
    } 

Я надеюсь, что поможет вам!

Смежные вопросы