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:
과 from 이라고 부르지
UIInterfaceOrientation, duration: NSTimeInterval)viewDidLoad
만 유연합니다.
그 방향의 포인터에 대한 zSprawl에게 감사드립니다. 이것은 iOS 8 이상에서만 유용하다는 점을 지적해야합니다.