2015-03-02 3 views
7

Я использую viewWillTransitionToSize, чтобы определить, когда устройство вращается в ландшафт. В зависимости от размера объекта, можно обнаружить, если заголовок для ландшафта и корректировать свои черты в соответствии с требованиями ...iOS viewWillTransitionToSize и ориентация устройства

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 

    if size.width > size.height { 
     self.setOverrideTraitCollection(UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Regular), forChildViewController: viewController) 
    } 
    else{ 
     self.setOverrideTraitCollection(nil, forChildViewController: viewController) 
    } 

    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 
} 

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

Возможно ли это без использования устаревших функций?

Я думал использовать ориентацию статус-бар ...

let orientation = UIApplication.sharedApplication().statusBarOrientation; 
    if(orientation == UIInterfaceOrientation.LandscapeLeft) 
    { 
     // Do something 
    } 
    else if(orientation == UIInterfaceOrientation.LandscapeRight) 
    { 
     // Do something else 
    } 

... но это не помогает, потому что это, как представляется, дать «старую» ориентацию статус.

Как я могу получить целевую ориентацию?

ответ

0

Использование [UIDevice currentDevice].orientation

6

Вы можете получить ориентацию при вращении использовать UIViewControllerTransitionCoordinator следующим образом:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransition(to: size, with: coordinator) 

    // will execute before rotation 

    coordinator.animate(alongsideTransition: { (context: UIViewControllerTransitionCoordinatorContext) in 

     // will execute during rotation 
     let orientation = UIApplication.shared.statusBarOrientation 
     if orientation == .landscapeLeft 
     { 
      // Do something 
     } 
     else if orientation == .landscapeRight 
     { 
      // Do something else 
     } 
    }) { (context: UIViewControllerTransitionCoordinatorContext) in 
     // will execute after rotation 
    } 
} 
Смежные вопросы