Weekoding

[Swift] 다크모드와 가로모드(디바이스 방향)에 대한 설정 본문

공부 노트(Swift)

[Swift] 다크모드와 가로모드(디바이스 방향)에 대한 설정

Weekoding 2022. 4. 4. 21:50

앱을 만드는데 있어 고려하게 되는 부분 중

다크모드 지원 여부와, 가로모드 지원 여부가 있다.

확실히 다크모드와 가로모드를 지원하게 된다면, 파편화나 색상 문제를 고려할 것이 훨씬 많아지니 난이도가 높아지는 것 같다.

프로젝트를 생성 하면, 기본적으로 양쪽 모두를 지원하는 설정으로 되어 있다.

이를 지원하지 않는다면 어떻게 해야 하는지 한번에 간단히 알아보았다.

 

 

 

🔳 다크모드 설정 🔲

info.plist의 'Appearance' key값을 이용하면 된다.

기존의 UIUserInterfaceStyle이라는 속성과도 동일하다.

Value값에 Light, Dark를 이용하여 두 모드 중 하나로 강제할 수 있다.

 

추가로, 코드상으로 다크모드를 확인할 수 있는 프로퍼티는

UITraitCollection.userInterfaceStyle이다.

.dark, .light, .unspecified 세 가지 값이 있다.

 

 

📲 디바이스 방향 설정

Appdelegate에서 'SupportedInterfaceOrientationsFor' 라는 메소드를 사용하면 된다.

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

UIInterfaceOrientationMask는 .portrait(세로 방향 고정) 이외에도,

.landscapeLeft, .landscapeRight, .portraitUpsideDown 등이 있다(developer 사이트 참고 !).

그래서 return 값을 배열 형태([.landscapeLeft, .landscapeRight])로 줄 수도 있다.

위와 같이 .portrait값만 return하게 되면 디바이스 방향 고정이 가능하다.

 

appdelegate가 아닌 상위 View에서 해당 메소드를 override 한다면, 

shouldAutorotate 메소드를 이용하여 특정 화면에서의 화면 회전을 제어할 수 있다.

(= 특정 화면이 하위 View라면, 상위 View에서 override 해야 함.)

 

특정 화면만 강제해야 할 경우, UIDevice"orientation" key 값을 이용하여 화면 방향을 고정시킬 수 있다.

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        let value = UIDeviceOrientation.landscapeRight.rawValue
            UIDevice.current.setValue(value, forKey: "orientation")
    }

 

 

 

 

 

 

틀린 부분이 있으면, 댓글 남겨주시면 감사하겠습니다!

 

참고 사이트: 

다크모드: https://poisonf2.tistory.com/88

가로모드: https://wnstkdyu.github.io/2017/12/15/orientations/,

https://jongwonwoo.medium.com/ios-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%ED%9A%8C%EC%A0%84-%EC%B2%98%EB%A6%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC-340f37204a27

Comments