1

我有一个使用 Rubymotion 的通用应用程序,iPhone 版本和 iPad 版本的 UI 设置差异很大。

主要是,iPhone 只支持纵向,iPad 只支持横向。

如果可能的话,我想通过在 Rakefile 上设置一些东西来做到这一点,据我了解,替代方法是在 delagate 方法中做一些事情,但如果可能的话,我想在设置文件中设置方向设置。

Motion::Project::App.setup do |app|
  #app settings
  app.name = 'xxxxx'
  app.version = "0.xxxx"
  app.device_family = [:iphone, :ipad]
  app.interface_orientations = [:portrait]
end

编辑:

关于 Jamon 的答案的一些更新。在 UINavigation 中让 shouldAutorotate 返回 false 会导致 iPad 版本出现奇怪的情况,即使方向设置为横向,iPad 版本的部分内容也会将其视图内容显示为纵向,当我为 shouldAutorotate 返回 true 时,它​​就解决了。

4

2 回答 2

2

据我所知,您将无法在您的 Rakefile 中执行此操作。您需要指定提供两个方向,然后以编程方式告诉 iOS 是否支持某个方向。

您的 UIViewControllers 和/或 UINavigationController(s) 应如下所示:

def ipad?
  NSBundle.mainBundle.infoDictionary["UIDeviceFamily"].include?("2")
end

def shouldAutorotate
  false # I think?
end

def supportedInterfaceOrientations
  if ipad?
    UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
  else
    UIInterfaceOrientationMaskPortrait
  end      
end

def preferredInterfaceOrientationForPresentation
  ipad? ? UIInterfaceOrientationMaskLandscapeLeft : UIInterfaceOrientationMaskPortrait
end

尚未测试此代码,但我过去使用过类似的代码。您可以使用三元(就像我在最后一种方法中所做的那样)或常规if.

于 2013-07-11T19:38:16.027 回答
0

截至今天,以下作品。

app_delegate.rb :

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    @window                       = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
    @window.rootViewController    = AppController.alloc.initWithNibName(nil, bundle: nil)
    @window.makeKeyAndVisible
    true
  end
end

AppController.rb (或任何你想给它的名字):

class AppController < UIViewController

  def viewDidLoad
    view.backgroundColor   =  UIColor.blackColor
    @label                 = UILabel.alloc.initWithFrame( CGRectMake(100,100,200,50) )
    @label.textColor       = UIColor.whiteColor
    @label.text            = "Handling device orientation"
    view.addSubview(@label)
  end


  def ipad?
    return true if UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad
  end

  def shouldAutorotate
    false
  end

  def supportedInterfaceOrientations
    if ipad?
      UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
    else
      UIInterfaceOrientationMaskPortrait
    end      
  end

  def preferredInterfaceOrientationForPresentation
    ipad? ? UIInterfaceOrientationMaskLandscapeLeft : UIInterfaceOrientationMaskPortrait
  end


end

AppController 中添加的标签只是给出了一个视觉提示。

于 2015-10-10T16:38:16.610 回答