Пользовательские переходы между контроллерами представления, поддерживающими разные / несовпадающие ориентации - PullRequest
0 голосов
/ 14 мая 2018

В частности, у меня проблема с отключением контроллера вида B, так что контроллер вида A снова виден. Следуя приведенным ниже инструкциям, внешний вид контроллера представления A будет сильно искажен.

  • Просмотр контроллера A поддерживает все ориентации, но вверх ногами .
  • Просмотр контроллера B поддерживает только портрет .

Как вызвать проблему / ошибку.

  1. Держите VC A в портретном положении.
  2. Открыть ВК Б.
  3. Держать устройство в альбомной ориентации.
  4. Увольнение ВК Б.

Внешний вид 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/

...