Rubymotion UIView Orientation

时间:2013-07-03 11:18:35

标签: ios7 rubymotion

我目前有一个我在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进行设置的任何想法?

3 个答案:

答案 0 :(得分:3)

来自Rubymotion developer center

  

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

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

Motion::Project::App.setup do |app|
  app.name = 'Awesome App'
  app.interface_orientations = [:landscape_left,:landscape_right]
end

答案 1 :(得分:1)

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

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

class ConfirmationController < UIViewController
    ...
    ...

    def supportedInterfaceOrientations
        UIInterfaceOrientationMaskLandscape
    end

    def preferredInterfaceOrientationForPresentation
        UIInterfaceOrientationLandscapeRight
    end

    ...
    ...
end

有关其工作原理的详细信息,请查看Apple's documentation

答案 2 :(得分:0)

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

<强> 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