2017-01-27 11 views
-1

Я закончил работу с авто-макетом в моем универсальном приложении iOS, и он отлично работает на портрете. Тем не менее, я хочу, чтобы пользователь мог поворачивать устройство и играть в игру в ландшафтном режиме. Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу, чтобы макет вообще менялся, и только изменять элементы управления игрой (скользящий экран должен заставить игрока подняться в обеих ориентациях).iOS - сохраняйте макет в ландшафте, но меняйте управление

Вещь, я не знаю, как предотвратить ориентацию от изменения макета и в то же время иметь возможность изменять поведение на основе ориентации. Вы, ребята, не знаете, как я могу это сделать?

ответ

0

Нашел способ сделать, для дальнейшего использования, когда ориентация отключена, мы по-прежнему можем получить доступ к ориентации устройства (а не ориентации интерфейса) и зарегистрировать уведомление, чтобы действовать после изменения.

class ViewController: UIViewController { 
    var currentOrientation = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Register for notification about device orientation change 
     UIDevice.current.beginGeneratingDeviceOrientationNotifications() 
     NotificationCenter.default.addObserver(self, selector: #selector(deviceDidRotate(notification:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil) 
    } 

    // Remove observer on window disappears 
    override func viewWillDisappear(_ animated: Bool) { 
     super.viewWillDisappear(animated) 

     NotificationCenter.default.removeObserver(self) 
     if UIDevice.current.isGeneratingDeviceOrientationNotifications { 
      UIDevice.current.endGeneratingDeviceOrientationNotifications() 
     } 
    } 

    // That part gets fired on orientation change, and I ignore states 0 - 5 - 6, respectively Unknown, flat up facing and down facing. 
    func deviceDidRotate(notification: NSNotification) { 
     if (UIDevice.current.orientation.rawValue < 5 && UIDevice.current.orientation.rawValue > 0) { 
      self.currentOrientation = UIDevice.current.orientation.rawValue 
     } 
    } 


}