Swift: предыдущий вид поворачивается при переходе в вид с другой ориентацией - PullRequest
0 голосов
/ 30 апреля 2018

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

Если быть более точным, это анимация масштабирования, а затем анимация затухания в новом контроллере представления ( ManageCaptureVC ):

UIView.animate(withDuration: 0.3, delay: 0.0, options: UIViewAnimationOptions.curveEaseOut, animations: {
    self.view.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
}, completion: { (finished: Bool) in
    // Here is where CaptureVC rotates while fading into ManageCaptureVC
    let transition = CATransition()
    transition.duration = 0.5
    transition.type = kCATransitionFade
    transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseIn)
    self.present(manageCaptureVC, animated: false, completion: nil)
})

В моем делегате приложения я отверг эти две функции:

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    if let rootViewController = self.topViewControllerWithRootViewController(rootViewController: window?.rootViewController) {
        if (rootViewController.responds(to: Selector(("canRotate")))) {
            // Unlock landscape view orientations for this view controller if it is not currently being dismissed
            if !rootViewController.isBeingDismissed{
                return .all
            }
        }
    }

    // Only allow portrait (standard behaviour)
    return .portrait
}

private func topViewControllerWithRootViewController(rootViewController: UIViewController!) -> UIViewController? {
    if (rootViewController == nil) {
        return nil
    }
    if (rootViewController.isKind(of: UITabBarController.self)) {
        return topViewControllerWithRootViewController(rootViewController: (rootViewController as! UITabBarController).selectedViewController)
    } else if (rootViewController.isKind(of: UINavigationController.self)) {
        return topViewControllerWithRootViewController(rootViewController: (rootViewController as! UINavigationController).visibleViewController)
    } else if (rootViewController.presentedViewController != nil) {
        return topViewControllerWithRootViewController(rootViewController: rootViewController.presentedViewController)
    }
    return rootViewController
}

И ManageCaptureVC Я добавил:

@objc func canRotate(){}

Чтобы он так отвечал на авторутинг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...