В частности, у меня проблема с отключением контроллера вида B, так что контроллер вида A снова виден. Следуя приведенным ниже инструкциям, внешний вид контроллера представления A будет сильно искажен.
- Просмотр контроллера A поддерживает все ориентации, но вверх ногами .
- Просмотр контроллера B поддерживает только портрет .
Как вызвать проблему / ошибку.
- Держите VC A в портретном положении.
- Открыть ВК Б.
- Держать устройство в альбомной ориентации.
- Увольнение ВК Б.
Внешний вид VC A теперь сильно поврежден / искажен / глючит.
Я подозреваю, что та же проблема возникнет, если VC поддерживают другой набор ориентаций, но сейчас это точный и простой случай, когда возникает проблема.
Переход обрабатывается классом, реализующим UIViewControllerAnimatedTransitioning
. В основном это выглядит так.
class FadeAnimator: NSObject {
let duration: TimeInterval = 1.0
var originFrame = CGRect.zero
}
extension FadeAnimator: UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return self.duration
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView
let toView = transitionContext.view(forKey: .to)!
containerView.addSubview(toView)
toView.alpha = 0
UIView.animate(withDuration: self.duration, animations: {
toView.alpha = 1
}, completion: { _ in
transitionContext.completeTransition(true)
})
}
}
Полный пример проекта, который показывает проблему здесь: https://bitbucket.org/zzzzapjonny/testtransition/src/master/testtransition/