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