2017-03-12 2 views
0

Quand les assertions du code ci-dessous se déclencheront-elles?Quand statusBarOrientation est différent de UIDeviceOrientation?

let orien = UIApplication.shared.statusBarOrientation 

UIDevice.current.beginGeneratingDeviceOrientationNotifications() 

switch UIDevice.current.orientation { 
case .portrait: assert(orien == .portrait) 
case .portraitUpsideDown: assert(orien == .portraitUpsideDown) 
case .landscapeLeft: assert(orien == .landscapeRight) 
case .landscapeRight: assert(orien == .landscapeLeft) 
default: return 
} 

Répondre

0

Lorsque votre application ne prend pas en charge les quatre orientations. UIDeviceOrientation reflète l'orientation de l'appareil indépendamment du fait que votre application prenne en charge cette orientation. statusBarOrientation sera toujours l'une des orientations que vous soutenez. Ainsi, par exemple, si votre appareil est en mode portrait à l'envers, mais que votre application ne prend pas en charge cette orientation, UIDeviceOrientation sera portraitUpsideDown, mais statusBarOrientation sera landscapeLeft (si tel était l'orientation du périphérique avant portrait à l'envers).

Notez que verrou de rotation sur l'iPhone ne fera pas les affirmations ci-dessus le feu - à la fois statusBarOrientation et UIDeviceOrientation sont signalés comme portrait, indépendamment de l'orientation réelle, mais ils sont cohérents entre eux.