[ios] Swift에서 장치 방향 가져 오기

Swift에서 현재 장치 방향을 어떻게 얻을 수 있는지 궁금합니다. Objective-C에 대한 예가 있다는 것을 알고 있지만 Swift에서 작동하지 못했습니다.

장치 방향을 가져 와서 if 문에 넣으려고합니다.

이것은 내가 가장 많은 문제를 겪고있는 라인입니다.

[[UIApplication sharedApplication] statusBarOrientation]



답변

당신이 사용할 수있는:

override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {
    var text=""
    switch UIDevice.currentDevice().orientation{
    case .Portrait:
        text="Portrait"
    case .PortraitUpsideDown:
        text="PortraitUpsideDown"
    case .LandscapeLeft:
        text="LandscapeLeft"
    case .LandscapeRight:
        text="LandscapeRight"
    default:
        text="Another"
    }
    NSLog("You have moved: \(text)")
}

SWIFT 3 업데이트

override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {
    var text=""
    switch UIDevice.current.orientation{
    case .portrait:
        text="Portrait"
    case .portraitUpsideDown:
        text="PortraitUpsideDown"
    case .landscapeLeft:
        text="LandscapeLeft"
    case .landscapeRight:
        text="LandscapeRight"
    default:
        text="Another"
    }
    NSLog("You have moved: \(text)")
}

또는

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
}

알림으로 확인할 수 있습니다. IOS8 Swift : 방향 변경을 감지하는 방법?

참고 : didRotateFromInterfaceOrientation 은 더 이상 사용되지 않습니다. iOS 2.0 이상에서는 viewWillTransitionToSize 사용

Face Up 및 Face Down의 경우 작동하지 않습니다. 따라서 다음을 사용해야합니다.

if UIApplication.shared.statusBarOrientation.isLandscape {
     // activate landscape changes
} else {
     // activate portrait changes
}


답변

Objective-C 코드와 같은 상태 표시 줄 (및 UI) 방향을 얻으려면 다음과 같이하면됩니다.

UIApplication.sharedApplication().statusBarOrientation

UIDevice 의 orientation속성 을 사용할 수도 있습니다 .

UIDevice.currentDevice().orientation

그러나 이는 UI의 방향과 일치하지 않을 수 있습니다. 문서에서 :

속성 값은 장치의 현재 방향을 나타내는 상수입니다. 이 값은 기기의 물리적 방향을 나타내며 애플리케이션 사용자 인터페이스의 현재 방향과 다를 수 있습니다. 가능한 값에 대한 설명은“UIDeviceOrientation”을 참조하십시오.


답변

Apple은 최근에 Landscape vs. Portrait 개념을 없애고 화면 크기를 선호합니다. 그러나 이것은 작동합니다.

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.currentDevice().orientation.isLandscape.boolValue {
        print("landscape")
    } else {
        print("portrait")
    }
}


답변

struct DeviceInfo {
struct Orientation {
    // indicate current device is in the LandScape orientation
    static var isLandscape: Bool {
        get {
            return UIDevice.current.orientation.isValidInterfaceOrientation
                ? UIDevice.current.orientation.isLandscape
                : UIApplication.shared.statusBarOrientation.isLandscape
        }
    }
    // indicate current device is in the Portrait orientation
    static var isPortrait: Bool {
        get {
            return UIDevice.current.orientation.isValidInterfaceOrientation
                ? UIDevice.current.orientation.isPortrait
                : UIApplication.shared.statusBarOrientation.isPortrait
        }
    }
}}

swift4 답변 : 이것이 내가하는 방법입니다.

1. 모든 종류의 뷰 컨트롤러에서 작동합니다.

2. 사용자가 앱을 회전 할 때도 작동합니다.

3. 또한 처음으로 앱을 설치하십시오.


답변

스위프트 4 :

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        if UIDevice.current.orientation.isLandscape {
            print("landscape")
        } else {
            print("portrait")
        }
    }


답변

현재 장치 방향을 찾으려면 다음 코드를 사용하십시오.

UIApplication.sharedApplication (). statusBarOrientation

신속한 3.0

UIApplication.shared.statusBarOrientation


답변

을 사용하는 데 문제가 있었지만 InterfaceOrientation로드시 방향에 액세스하지 않는 것을 제외하고는 정상적으로 작동했습니다. 그래서 나는 이것을 시도했고 그것은 골키퍼입니다. 이것은 절대적인 bounds.width방향이 아니라 항상 현재 방향을 참조하기 때문에 작동합니다 nativeBounds.width.

    if UIScreen.mainScreen().bounds.height > UIScreen.mainScreen().bounds.width {
        // do your portrait stuff
    } else {    // in landscape
        // do your landscape stuff
    }

나는 이것을 from willRotateToInterfaceOrientation(toInterfaceOrientation:
UIInterfaceOrientation, duration: NSTimeInterval)
과 from 이라고 부르지 viewDidLoad만 유연합니다.

그 방향의 포인터에 대한 zSprawl에게 감사드립니다. 이것은 iOS 8 이상에서만 유용하다는 점을 지적해야합니다.