2017-01-10 19 views
-1

UIDevice.current.orientation nicht mehr in schnellen 3 funktioniert Es gibt immer unbekanntSwift 3 - Überprüfung der Orientierung in der heutigen Erweiterung

ich nicht einen anderen Weg gefunden, um die Orientierung außer dem folgenden Code zu bekommen

func isLandscape() -> Bool{ 
    let scale = UIScreen.main.scale 
    let nativeSize = UIScreen.main.currentMode?.size 
    let sizeInPoints = UIScreen.main.bounds.size 

    if scale * sizeInPoints.width == nativeSize?.width{ 
     return false 
    }else{ 
     return true 
    } 
} 

siehe What is the best way to detect orientation in an app extension?

Antwort

0

EDITED: Frédéric Dal Bo wollte die aktuellen Geräte Orientierung in die getOrientation Methode zu übergeben zu können, wie er kann nicht c alle UIDevice.current innerhalb der Erweiterung, die er verwendete. Hoffentlich wird dies funktionieren, anstatt die UIDeviceOrientation innerhalb des getOrientation Erfassungsverfahren UIDevice.current verwenden, können Sie die bestimmen, aus der Notification, und dann, wenn Sie die Meldung verarbeiten, übergeben entlang der Informationen:

func getOrientation(orientation: UIDeviceOrientation) { 

    switch orientation { 
    case .portrait: 
     print("Portrait") 
    case .landscapeLeft: 
     print("Lanscape Left") 
    case .landscapeRight: 
     print("Landscape Right") 
    case .portraitUpsideDown: 
     print("Portrait Upside Down") 
    case .faceUp: 
     print("Face up") 
    case .faceDown: 
     print("Face Down") 
    case .unknown: 
     print("Unknown") 
    } 
} 

Wenn Sie die Klasse zu initialisieren oder in viewDidLoad(_:), wenn Sie wollen, um die Änderung in einem ViewController zu handhaben:

NotificationCenter.default.addObserver(self, selector: #selector(deviceRotated(_:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil) 

func deviceRotated(_ notification: Notification) { 
    let device = notification.object as! UIDevice 
    let orientation = device.orientation 
    getOrientation(orientation: orientation) 
} 

dann, wenn das Gerät dreht, die deviceRotated(orientation:) genannt wird, und es wird die aktuellen Geräte Orientierung passieren in die Methode. Sie können dann die Orientierungsänderung entsprechend bearbeiten.

+0

Vielen Dank Pierce, aber ich bemerkte, dass beide Methoden, die Sie vorgeschlagen haben, in einer heutigen Erweiterung nicht funktionieren. Deshalb habe ich UIScreen.main verwendet. Vielleicht irre ich mich –

+0

@ Frédéric Dal Bo - Ich werde meine Antwort aktualisieren, um hoffentlich für Ihre aktuellen Umstände zu arbeiten. – Pierce

+0

@ Frédéric Dal Bo - Bitte sehen Sie meine aktualisierte Antwort, es sollte für Ihre Bedürfnisse arbeiten, und in der Lage sein, 'UIDevice' zu ​​verwenden – Pierce

Verwandte Themen