개발

iOS Swift 특정 화면에서만 화면 회전 기능 활성화 해보기

소소ing 2021. 7. 15. 16:53
반응형

iOS 앱을 개발하다 특정 화면에서 단말기 회전에 따른 화면 회전을 고려한다면 다음의 내용을 확인해 보자!

1. 먼저 iOS 앱의 화면 기본 설정이 어떻게 적용되는지 알아보자!

- 우선적으로 앱의 경우 info.plist의 화면 회전 설정을 먼저 체크하게된다.

- 아래 Xcode Target -> General -> Deployment Info에서 화면 회전에 대한 설정이 가능하다.

   -- Upside Down의 경우 폰을 180도 뒤집은 경우 화면 회전을 뜻하나 일부 단말기에서는 해당 회전이 지원되지 않을 수 있다.

       (노치 디자인 단말의 경우 Upside Down이 지원되지 않을 가능성이 높다)

 

- 위의 Device Orientation에 Landscape Left, Landscape Right가 휴대전화 가로로 보기시 화면 회전을 지원하는 설정이며 해당 값이 체크 되어 있지 않더라도 아래 함수에 다음과 같이 .all로 명시가 되어 있다면 화면 회전을 지원하게 된다.

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {

   return [.all]

}

 

- 즉, 첫번째로 info.plist의 회전값을 참고하나 두번째 application(_:supportedInterfaceOrientationsFor:) 함수가 정의 되어 있다면 application(_:supportedInterfaceOrientationsFor:) 설정 값을 우선적으로 사용하게 된다.

 

2. 그럼 특정 뷰를 회전시키는 방법을 알아보자!

- 여기서는 application(_:supportedInterfaceOrientationsFor:) 함수를 이용하는 방법으로 진행한다.

// 화면 회전을 제어할 변수 선언

var shouldSupportAllOrientation = false

// .... 생략 ....

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {

    // 화면 회전 변수 값에 따라 화면 회전 활성화 지정

    if (shouldSupportAllOrientation){

        return [.all]

    } else {

        return [.portrait, .portraitUpsideDown]

    }

}

- 화면을 회전 하고자 하는 ViewController에 아래와 같이 설정한다. 

// AppDelegate에서 정의한 화면 회전 변수에 접근할 수 있도록 AppDelegate 변수 선언

let appDelegate = UIApplication.shared.delegate as! AppDelegate

// .... 생략 .... 

override func viewWillAppear(_ animated: Bool) {

    // 화면이 보일때 마다 화면 회전 변수 활성화  

    appDelegate.shouldSupportAllOrientation = true

    super.viewWillAppear(animated)

}

override func viewWillDisappear(_ animated: Bool) {

    // 화면이 가릴때 마다 화면 회전 변수 비활성화  

    appDelegate.shouldSupportAllOrientation = false

    super.viewWillDisappear(animated)

}

반응형