studio rotacion pantalla orientacion dispositivo detectar cambio ios swift device-orientation

ios - rotacion - orientacion pantalla android studio



¿Cómo comprobar si la orientación del dispositivo es horizontal o izquierda? (4)

Esto funciona en Swift 3 y 4

switch UIApplication.shared.statusBarOrientation { case .portrait: //do something break case .portraitUpsideDown: //do something break case .landscapeLeft: //do something break case .landscapeRight: //do something break case .unknown: //default break }

if UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation) { print("landscape") } if UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation){ print("portrait") }

¿Cómo puedo comprobar si es horizontal o izquierdo?


Hay una cosa que destruye todas estas respuestas: la multitarea de iOS9 iPad.

En iOS 9, una aplicación de iPad por defecto opta a la multitarea de iPad. Esto significa que debe adoptar todas las orientaciones en todo momento. Dado que no ha optado por no realizar la multitarea en el iPad, el tiempo de ejecución supone que adopta todas las orientaciones en todo momento, por lo que no es necesario que se moleste en preguntarle qué orientaciones permite, ya que ya sabe la respuesta (todas ellas ).

Para hacer el tamaño correcto de celda para UICollectionView que hago a continuación:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if UIDevice.current.userInterfaceIdiom == .phone { return CGSize(width: collectionView.frame.size.width, height: 120) } else { var width:CGFloat = 0 let height = 250 // because of iOS9 and iPad multitasking if (UIApplication.shared.statusBarOrientation.rawValue <= UIInterfaceOrientation.portraitUpsideDown.rawValue) { width = (collectionView.frame.size.width - 3) / 3 } else { width = (collectionView.frame.size.width - 4) / 4 } return CGSize(width: Int(width), height: Int(height)) } }

y dentro de viewWillTransition siguiente:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { if let layout = self.collectionViewLayout as? UICollectionViewFlowLayout { layout.invalidateLayout() } }

Porque funciona más rápido que sin.


UIDeviceOrientation devolverá un valor para eso:

enum UIDeviceOrientation : Int { case Unknown case Portrait case PortraitUpsideDown case LandscapeLeft case LandscapeRight case FaceUp case FaceDown }


puedes hacer algo como

if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft{ } else if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight{ } else if UIDevice.currentDevice().orientation == UIDeviceOrientation.UIDeviceOrientationPortraitUpsideDown{ } else if UIDevice.currentDevice().orientation == UIDeviceOrientation.UIDeviceOrientationPortrait{ }

SWIFT 3

if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft { } else if UIDevice.current.orientation == UIDeviceOrientation.landscapeRight { } else if UIDevice.current.orientation == UIDeviceOrientation.portrait { } else if UIDevice.current.orientation == UIDeviceOrientation.portraitUpsideDown { }