2015-03-02 233 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) 
} 

不过,我希望能够检测我的设备是否正在转换为横向向左或landscape-对。这将允许我创建不同的行为或视图,具体取决于设备的特定方向。 (左还是右)。

这可能没有使用任何弃用的功能?

我想用状态栏方向......

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 
    } 
}