2013-07-11 1 views
1

У меня есть универсальное приложение с использованием Rubymotion, а настройка пользовательского интерфейса сильно отличается от версии iPhone и версии iPad.Изменение настроек ориентации устройства с помощью устройства в Rubymotion

Главное, в 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 

EDIT:

некоторые обновления о том, как ответ хамон работал вне. , имеющий toAutorotate return false в UINavigation, привел к нечетным появлениям в версии iPad, если части версии iPad отображают содержимое своего представления как портрет, даже если ориентация настроена на пейзаж, это сработало, когда я вернул true для shouldAutorotate.

ответ

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.

+0

Спасибо, у меня возникло чувство, что мне нужно идти таким образом. Все так отличается от Rails. так много учиться. – Saifis

+0

Получил это, я использовал UINavigationController, поэтому мне пришлось подклассифицировать его и называть shouldAutorotate там, но это было связано с проблемами, благодаря связке. – Saifis

+0

Отлично, рад, что это помогло! –

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 только дает визуальную подсказку о том, Это.

 Смежные вопросы

  • Нет связанных вопросов^_^