UIPageViewController - анимированный переход к следующему виду контроллера смешивается с изменением ориентации - PullRequest
0 голосов
/ 07 февраля 2019

Я занимаюсь разработкой приложения, которое использует UIPageViewController.В какой-то момент в подклассе UIPageViewController я устанавливаю следующий контроллер вида следующим образом:

guard let currentViewController = self.viewControllers?.first else { return }
guard let nextViewController = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) else { return }

self.setViewControllers([nextViewController], direction: .forward, animated: true, completion: { (finished) in         
            // some finishing work
})

Приложение поддерживает как книжную, так и альбомную ориентацию.Переход к следующему представлению контроллера анимирован.Когда эта анимация начинается, и если после этого начинается изменение ориентации, в конце обеих анимаций вместо следующего будут два частично видимых контроллера вида.

Я предполагаю, что он вычисляет смещение до начала перехода к следующему контроллеру вида, затем запускает анимацию с этим смещением, затем поворачивает и изменяет размеры видов, но не пересчитывает смещение.Или как то так.У кого-нибудь есть идеи, как это исправить или обойти это.

1 Ответ

0 голосов
/ 07 февраля 2019

Я только что провел начальный тест этого, но он может сделать работу за вас.

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    if let currentViewController = self.viewControllers?.first {

        coordinator.animate(alongsideTransition: { _ in
            // nothing here
        }) { [unowned self] _ in
            self.setViewControllers([currentViewController], direction: .forward, animated: false, completion: { (finished) in
                // some finishing work
            })
        }

    }

    super.viewWillTransition(to: size, with: coordinator)

}

В зависимости от того, что "некоторые отделочные работы" влечет за собой, это может быть немного сложнее ... вероятно, необходимо проверить состояние finished.

...