Device Orientation

아이폰의 방향을 가로나 세로로 전환할 때, 방향에 따라 화면을 회전하고 싶다면 Device Orientation을 설정해주면 됩니다.

방법 1

Xcode로 프로젝트를 생성하면 가장 먼저 뜨는 화면인 Project Editor-Target Settings 경로에서 앱이 지원하는 회전 방향을 설정할 수 있습니다.

▼ Deployment Info - Device Orientation

  • [X] portrait : 세로방향
  • [x] Upside Down : 180° 회전
  • [x] Landscape Left : 왼쪽으로 90° 회전
  • [x] Landscape Right : 오른쪽으로 90° 회전

위처럼 앱에서 지원하고싶은 회전 방향을 체크해주면 됩니다. portrait를 기준으로 방향을 전환합니다.


방법 2

클래스에서 supportedInterfaceOrientations 속성을 Override(재정의) 해주면 됩니다.

import UIKit

class ViewController: UIViewController {

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { .all }

}

이 코드를 이해하려면 상속과 재정의를 알아야 합니다.

클래스는 다른 클래스를 상속할 수 있습니다.
상속할 클래스는 슈퍼 클래스, 상속받은 클래스는 서브 클래스라고 합니다.
클래스명 뒤에 : 콜른을 사용하면 상속할 수 있습니다.

class SubClass: SuperClass {
}

슈퍼 클래스로부터 상속받은 멤버는 서브 클래스에서 직접 선언한것처럼 상속받은 멤버를 자유롭게 사용할 수 있습니다.
상속받은 멤버가 서브 클래스에 적절하지 않다면, 멤버 선언 앞에 override 키워드를 사용해 구현을 재정의할 수 있습니다. 이것을 오버라이딩(Overriding)이라고 합니다.

override var supportedInterfaceOrientations

위의 개념을 바탕으로 supportedInterfaceOrientations 속성이 어떻게 오버리이딩 됐는지 이해할 수 있습니다.

UIViewController는 supportedInterfaceOrientations 멤버를 가지고 있는 클래스입니다.
ViewController는 UIViewController를 상속받고 있기 때문에, UIViewController의 멤버 supportedInterfaceOrientations 도 자유롭게 사용할 수 있습니다.

아이폰의 경우 이 속성의 기본값은 .allButUpsideDown(180° 회전을 제외한 나머지 모두)입니다.
그래서 override 키워드를 사용해, 속성값을 .all(모든방향)(으)로 재정의했습니다.


TIP

속성값을 재정의하더라도, 기기에따라 화면을 180° 뒤집어도 방향전환이 이루어 지지 않을수도 있습니다.

시스템은 뷰 컨트롤러가 지원하는 방향이, 앱 뿐만 아니라 기기에서도 지원하는지 비교합니다.
UIViewController클래스는 iPhone X 처럼 홈버튼이 없는 기기들은 Upside Down(180° 회전)방향을 지원하지 않습니다.

아래 Apple 공식 문서를 참고하면 더 자세한 내용을 알 수 있습니다.
supportedInterfaceOrientations 관련 문서 링크

profile
iOS개발자 꿈나무

0개의 댓글