Невозможно заставить ориентацию UIViewController

У меня есть портретное приложение с одним альбомным ViewController.

Я много копался о том, как заставить ориентироваться на ландшафт, когда приложение привязано к портрету, и я попробовал множество решений, представленных здесь, и не только, но безуспешно.

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

override func viewDidAppear(animated: Bool)
{
    let value = UIInterfaceOrientation.LandscapeRight.rawValue
    UIDevice.currentDevice().setValue(value, forKey: "orientation")
}

override func shouldAutorotate() -> Bool
{
    return true
}

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

Это в AppDelegate

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {

    if self.window?.rootViewController?.presentedViewController is ConclusionReferencesVC {

        let conclusionReferencesVC = self.window!.rootViewController!.presentedViewController as! ConclusionReferencesVC

        if conclusionReferencesVC.isPresented
        {
            return UIInterfaceOrientationMask.LandscapeRight;
        }
        else
        {
            return UIInterfaceOrientationMask.Portrait;
        }
    }
    else
    {
        return UIInterfaceOrientationMask.Portrait;
    }
}

Это в ВК я хочу иметь в ландшафте:

var isPresented = true

@IBAction
func dismiss()
{
    isPresented = false
    self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil);
}

По какой-то причине метод supportsInterfaceOrientationsForWindow не проверяет начальное условие.

Я также попробовал это среди других, но не повезло:

Как заблокировать ориентацию одного контроллера вида в портретном режиме только в Swift

supportInterfaceOrientationsForWindow в Swift 2.0

Есть идеи? Кажется, я что-то упустил, но не могу понять, что.

Ответы на вопрос(1)

Решение Вопроса

попробуйте это для силы, чтобыLandscapeRight только режим

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if(self.supportedInterfaceOrientations() == UIInterfaceOrientationMask.LandscapeRight && UIDevice.currentDevice().orientation != UIDeviceOrientation.LandscapeRight)
        {
            let value = UIInterfaceOrientation.LandscapeRight.rawValue
            UIDevice.currentDevice().setValue(value, forKey: "orientation")
        }

    }

а затем использовать категорию, как это

    import UIKit

extension UINavigationController{

    override public func shouldAutorotate() -> Bool
    {
    return (self.viewControllers.last?.shouldAutorotate())!
    }

    override public func supportedInterfaceOrientations() ->UIInterfaceOrientationMask
    {
    return (self.viewControllers.last?.supportedInterfaceOrientations())!;
    }

    override public func preferredInterfaceOrientationForPresentation()-> UIInterfaceOrientation
    {
    return (self.viewControllers.last?.preferredInterfaceOrientationForPresentation())!;
    }

}
РЕДАКТИРОВАНИЕ

Если вы не используете навигационный контроллер, используйте этот

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if(self.supportedInterfaceOrientations() == UIInterfaceOrientationMask.LandscapeRight && UIDevice.currentDevice().orientation != UIDeviceOrientation.LandscapeRight)
        {
            let value = UIInterfaceOrientation.LandscapeRight.rawValue
            UIDevice.currentDevice().setValue(value, forKey: "orientation")
        }

    }

    override func supportedInterfaceOrientations() ->UIInterfaceOrientationMask
    {
        return .LandscapeRight;
    }

Я надеюсь, это поможет вам

 Reinier Melian11 июл. 2016 г., 17:23
@ daydr3am3r проверить мой ответ был отредактирован, у меня отлично работает с этим кодом
 daydr3am3r11 июл. 2016 г., 16:45
Спасибо @ReinierMelian, но, похоже, это не работает.
 Reinier Melian11 июл. 2016 г., 17:04
@ daydr3am3r Прежде всего, вы используете навигационный контроллер?
 Reinier Melian11 июл. 2016 г., 17:10
@ daydr3am3r Я реализовал это в 2 моих приложениях, но на нем установлен контроллер навигации, поэтому я проверю без контроллера навигации и выложу результаты, если они у меня есть;)
 daydr3am3r11 июл. 2016 г., 17:05
Нету. И вот почему не работает. Сожалею. Я должен был упомянуть об этом раньше.
 daydr3am3r11 июл. 2016 г., 17:14
Благодарю. Я постараюсь посмотреть, смогу ли я что-нибудь придумать и написать обратно.
 daydr3am3r12 июл. 2016 г., 10:35
Благодарю. Это работает как шарм. Большое спасибо.

Ваш ответ на вопрос