У меня есть плавающая ошибка в моем приложении.
Иногда, когда я делаю
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 добавляются анимации. Где я могу ошибиться?
Это ошибка на устройствах и в симуляторах.
Я не использую пользовательские переходы.