iOS에서 화면 방향을 고정해야 하는 경우
앱을 개발하다 보면 특정 화면에서만 가로 모드(Landscape) 또는 세로 모드(Portrait)로 UI를 표시해야 하는 상황이 자주 발생합니다. 예를 들어 영상 플레이어 화면은 가로 모드에 최적화되어 있고, 설정 화면이나 목록형 화면은 세로 모드가 더 자연스럽습니다.
이 글에서는 Swift를 사용해 iOS 앱의 화면 방향을 프로그래밍 방식으로 잠그는 방법을 단계별로 살펴보겠습니다.
기본 구현 방법
Xcode를 실행하고 새 프로젝트를 생성한 뒤, ViewController.swift 파일에 아래 코드를 작성합니다.
// 자동 회전 비활성화
override open var shouldAutorotate: Bool {
return false
}
// 지원할 화면 방향 지정 (세로 모드)
override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}이 두 가지 속성만 오버라이드하면 해당 뷰 컨트롤러에서는 기기를 아무리 돌려도 화면이 세로 모드로 고정됩니다.
코드 상세 설명
1. shouldAutorotate
shouldAutorotate는 기기가 물리적으로 회전했을 때 뷰 컨트롤러의 인터페이스 방향을 자동으로 변경할지 여부를 결정합니다. false를 반환하면 기기를 회전해도 화면이 따라 움직이지 않습니다.
2. supportedInterfaceOrientations
supportedInterfaceOrientations는 해당 뷰 컨트롤러가 지원하는 인터페이스 방향을 UIInterfaceOrientationMask 타입으로 지정합니다. 위 예제에서는 .portrait를 반환해 세로 모드만 허용했습니다.
상황에 따라 아래 값들을 활용할 수 있습니다.
.portrait— 세로 모드.landscapeLeft,.landscapeRight— 각각 좌/우 가로 모드.landscape— 양쪽 가로 모드 모두 허용.allButUpsideDown— 거꾸로 세로 모드를 제외한 전체 방향.all— 모든 방향 허용
적용 시 주의 사항
뷰 컨트롤러 단위로 방향을 제어하려면 Xcode 프로젝트 설정의 General 탭에서 해당 방향이 체크되어 있어야 합니다. 또한 네비게이션 컨트롤러나 탭 바 컨트롤러처럼 컨테이너 역할을 하는 뷰 컨트롤러를 사용하는 경우에는, 화면에 표시되는 최상위(top) 뷰 컨트롤러로 방향 관련 메서드 호출을 전달하도록 구현해야 의도대로 동작합니다.
이렇게 하면 특정 화면에서만 방향을 잠그거나, 반대로 특정 화면에서만 회전을 허용하는 유연한 처리가 가능합니다.