По умолчанию анимация push viewController не воспроизводится - PullRequest
0 голосов
/ 06 марта 2019

У меня есть плавающая ошибка в моем приложении. Иногда, когда я делаю

rootNavigationController.pushViewController(viewController, animated: animated)

анимация не работает. Создается новый viewController, вызывается метод viewWillAppear, но пользовательский интерфейс не изменяется. Новый viewController находится вне экрана.

Я использую swizzling для подключения к CALayer.add(_:forKey:). Это трассировка стека для анимации без проблем:

Thread 1 Queue : com.apple.main-thread (serial)
#0  0x00000001030ae890 in CALayer.swizz_add(_:forKey:)
#1  0x00000001030af468 in @objc CALayer.swizz_add(_:forKey:) ()
#2  0x000000018af12708 in -[UIViewAnimationState _trackAnimation:nonAdditiveAnimation:withAnimationKey:forKeyPath:inLayer:] ()
#3  0x000000018ba5dbe0 in __85+[UIViewPropertyAnimator _animationBlockForTrackingAnimation:animator:trackingSetup:]_block_invoke ()
#4  0x000000018afaa224 in -[UIViewPropertyAnimator _runAnimations] ()
#5  0x000000018ba64484 in __49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke_2 ()
#6  0x000000018ba642d4 in __49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke ()
#7  0x000000018ba643f8 in __49-[UIViewPropertyAnimator startAnimationAsPaused:]_block_invoke.1052 ()
#8  0x000000018afa9cbc in -[UIViewPropertyAnimator _setupAnimationTracking:] ()
#9  0x000000018afa96d4 in -[UIViewPropertyAnimator startAnimationAsPaused:] ()
#10 0x000000018afa79b4 in +[UIViewPropertyAnimator _trackAnimationWithAnimator:forLayer:forAnimationKey:trackingSetup:] ()
#11 0x000000018b00ea90 in +[UIViewPropertyAnimator _trackAdditiveAnimationWithAnimator:nonAdditiveAnimation:withAnimationKey:forKeyPath:forLayer:] ()
#12 0x000000018b1e0534 in __67-[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:]_block_invoke.170 ()
#13 0x000000018aeab20c in -[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:] ()
#14 0x0000000185338c24 in CA::Layer::set_position(CA::Vec2<double> const&, bool) ()
#15 0x000000018532aa24 in -[CALayer setPosition:] ()
#16 0x000000018532afd4 in -[CALayer setFrame:] ()
.....

А вот трассировка стека, когда я сталкиваюсь с ошибкой:

#0  0x000000010488a554 in CALayer.swizz_add(_:forKey:)
#1  0x000000010488aefc in @objc CALayer.swizz_add(_:forKey:) ()
#2  0x000000018b1fb0ec in __modifyTrackedAnimationsWithFactory_block_invoke ()
#3  0x000000018b1ebdc4 in mapTrackedAnimations ()
#4  0x000000018b1ebb40 in +[UIView modifyTrackedAnimations:removeOnCompletion:animationFactory:block:] ()
#5  0x000000018ba5fe00 in -[UIViewPropertyAnimator _pauseAnimation:] ()
#6  0x000000018ba61080 in -[UIViewPropertyAnimator pauseAnimation] ()
#7  0x000000018afa79d8 in +[UIViewPropertyAnimator _trackAnimationWithAnimator:forLayer:forAnimationKey:trackingSetup:] ()
#8  0x000000018b00ea90 in +[UIViewPropertyAnimator _trackAdditiveAnimationWithAnimator:nonAdditiveAnimation:withAnimationKey:forKeyPath:forLayer:] ()
#9  0x000000018b1e0534 in __67-[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:]_block_invoke.170 ()
#10 0x000000018aeab20c in -[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:] ()
#11 0x0000000185338c24 in CA::Layer::set_position(CA::Vec2<double> const&, bool) ()
#12 0x000000018532aa24 in -[CALayer setPosition:] ()
#13 0x000000018532afd4 in -[CALayer setFrame:] ()
....

Во втором случае pauseAnimation называется insted из startAnimationAsPaused:, и для ключей "UIPacingAnimationForAnimatorsKey", "position" со скоростью = 0 добавляются анимации. Где я могу ошибиться? Это ошибка на устройствах и в симуляторах. Я не использую пользовательские переходы.

1 Ответ

0 голосов
/ 17 марта 2019

Скорее всего, у вас что-то неправильно реализовано, когда вы делаете Swizzling.Попробуйте отключить его и проверьте, вызывается ли startAnimationAsPaused.Если все работает так, как ожидалось, тогда углубляйтесь в излишнюю информацию (было бы неплохо увидеть ваш код) и проверьте, что там происходит.

...