programing

프로그래밍 방식으로 iPhone 인터페이스 방향을 결정하는 방법은 무엇입니까?

goodcopy 2021. 1. 16. 10:36
반응형

프로그래밍 방식으로 iPhone 인터페이스 방향을 결정하는 방법은 무엇입니까?


가능한 값 UIDevice.orientation에는 UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown. 기기가 평평하다는 것을 아는 것이 유용 할 수 있지만, 이는 평면 모드가 세로 또는 가로 모드의 인터페이스를 표시하는지 여부를 알려주지 않습니다. 장치가 모호한 정보를 반환하는 경우 GUI의 현재 방향을 찾는 방법이 있습니까? 마지막 세로 / 가로 방향을 기억하거나 기본 UIView의 경계 높이와 너비를 확인하기 위해 방향 변경 이벤트를 추적 할 수 있다고 가정합니다. 내가 누락 된 장치 또는 UIView에 속성이 있습니까?


뷰 컨트롤러에서는 간단히 코드를 사용할 수 있습니다.

UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;

UIInterfaceOrientation은 열거 형입니다.

typedef enum {
  UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
  UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
  UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeLeft,
  UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeRight
} UIInterfaceOrientation;

세 가지 방법으로 오리엔테이션을 얻을 수 있습니다.

  1. UIInterfaceOrientation orientation = self.interfaceOrientation;인터페이스의 현재 방향 인 UIInterfaceOrientation을 반환합니다. UIViewController의 속성 이며 UIViewController 클래스에서만 이 속성에 액세스 할 수 있습니다 .

  2. UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];응용 프로그램 상태 표시 줄의 현재 방향 인 UIInterfaceOrientation을 반환합니다. 응용 프로그램의 모든 지점 에서 해당 속성에 액세스 할 수 있습니다 . 내 경험에 따르면 이것이 실제 인터페이스 방향을 검색 하는 가장 효과적인 방법 입니다.

  3. UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];UIDeviceOrientation , 장치 방향을 반환 합니다 . 응용 프로그램의 모든 지점 에서 해당 속성에 액세스 할 수 있습니다 . 그러나 UIDeviceOrientation이 항상 UIInterfaceOrientation은 아닙니다. 예를 들어 장치가 일반 테이블에 있으면 예기치 않은 값을받을 수 있습니다.


장치가 가로 또는 세로로만 신경 쓰이는 경우 뷰 컨트롤러에 몇 가지 편리한 방법이 있습니다.

UIDeviceOrientationIsLandscape(self.interfaceOrientation)
UIDeviceOrientationIsPortrait(self.interfaceOrientation)

상태 표시 줄 방향 (statusBarOrientation) 은 상태 표시 줄이 숨겨져 있어도 항상 인터페이스 방향을 반환합니다 .

뷰 컨트롤러없이 상태 표시 줄 방향을 사용할 수 있습니다. 장치 방향이 아닌 현재 뷰 방향을 제공합니다.

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

나는 같은 상황을 보았다. 특히이 흐름에서 :

  • 컨트롤러 1이로드됩니다. 세로.
  • 스택에 다른 컨트롤러 푸시
  • 두 번째 컨트롤러에있는 동안 기기 방향을 가로로 회전합니다.
  • 장치를 테이블 위에 평평하게 놓은 다음 원래 컨트롤러로 돌아갑니다.

이 시점에서 내가 본 모든 방향 확인은 잘못된 방향 5를 반환하므로 가로 또는 세로 레이아웃을 사용해야하는지 여부를 직접 결정할 수 없습니다. (나는 방향별로 사용자 지정 레이아웃 위치 지정을 수행하고 있으므로 이것은 중요한 정보입니다)

제 경우에는 뷰의 경계 너비 검사가 사물의 실제 상태를 결정하는 데 사용되지만 다른 사람들이 다르게 처리했는지 알고 싶습니다.


다음은 유용 할 수있는 코드입니다.

UIInterfaceOrientation  orientation = [UIDevice currentDevice].orientation;
NSLog( @" ORIENTATION: %@", UIInterfaceOrientationIsLandscape( orientation ) ? @"LANDSCAPE" : @"PORTRAIT");

참조 URL : https://stackoverflow.com/questions/634745/how-to-programmatically-determine-iphone-interface-orientation

반응형