0

我目前有一个用 Rubymotion 编写的 ios 应用程序。我正在尝试将 UIViewController 设置为始终以纵向显示,而不是旋转到横向。我不能只在我的 rakefile 中指定纵向方向,因为我需要其他 uiviewcontrollers 的所有方向。请参阅下面的代码:

class ConfirmationController < UIViewController

def viewDidLoad
    super
    self.view.backgroundColor = UIColor.blueColor
end

def shouldAutorotate
  true
end

def supportedInterfaceOrientations
  UIInterfaceOrientationMaskPortrait
end

def preferredInterfaceOrientationForPresentation
  UIInterfaceOrientationMaskPortrait
end

如您所见,我正在尝试设置我的 preferredInterfaceOrientation,但当我的设备旋转时,它仍会变为横向。关于如何使用 Rubymotion 进行设置的任何想法?

4

3 回答 3

3

来自Rubymotion 开发者中心

支持的界面方向。值必须是以下一个或多个符号的数组::portrait、:landscape_left、:landscape_right 和:portrait_upside_down。默认值为 [:portrait, :landscape_left, :landscape_right]。

如果您需要锁定整个应用程序的横向方向,您可以interface_orientations在您的 Rakefile中设置

Motion::Project::App.setup do |app|
  app.name = 'Awesome App'
  app.interface_orientations = [:landscape_left,:landscape_right]
end
于 2013-09-03T15:14:16.457 回答
1

preferredInterfaceOrientation不是属性,它是您必须实现的方法,以更改视图的行为。

因此,您应该删除设置的行preferredInterfaceOrientation并在您的 ViewController 中添加类似这样的内容:

class ConfirmationController < UIViewController
    ...
    ...

    def supportedInterfaceOrientations
        UIInterfaceOrientationMaskLandscape
    end

    def preferredInterfaceOrientationForPresentation
        UIInterfaceOrientationLandscapeRight
    end

    ...
    ...
end

有关其工作原理的详细信息,请查看Apple 的文档

于 2013-07-03T12:38:15.733 回答
0

经过研究,我发现问题出在 UINavigationController 是 rootView。我必须添加一个从 UINavigationController 继承的命名控制器,然后覆盖默认的 UINavigation 设置以根据 topViewController 进行更改。

AppDelegate.rb

class TopNavController < UINavigationController

  def supportedInterfaceOrientations
    self.topViewController.supportedInterfaceOrientations
  end

  def preferredInterfaceOrientationForPresentation
    self.topViewController.preferredInterfaceOrientationForPresentation
  end
end

main_controller = MainScreenController.alloc.initWithNibName(nil, bundle: nil)
@window.rootViewController= TopNavController.alloc.initWithRootViewController(main_controller)

UIViewController

def shouldAutorotate
  true
end

def supportedInterfaceOrientations
  UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
end

def preferredInterfaceOrientationForPresentation
  UIInterfaceOrientationLandscapeLeft
end
于 2014-10-06T20:56:04.930 回答