Project Target에서 설정해주면 Info.plist에 자동으로 반영된다
application(_:supportedInterfaceOrientationsFor:)
로 설정하기
var supportOnlyPortrait = true
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if (supportOnlyPortrait == false) {
return UIInterfaceOrientationMask.allButUpsideDown
}
return UIInterfaceOrientationMask.portrait
}
let appDelegate = UIApplication.shared.delegate as! AppDelegate
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
appDelegate.supportOnlyPortrait = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
appDelegate.supportOnlyPortrait = false
}
가로로 눕혀도 화면 보기가 세로로 고정된다
전역변수를 선언해야 해서 부담이 된다
supportedInterfaceOrientations
를 이용하기
.portrait
을 반환한다둘 다 가능하게 하려면 이렇게 배열에 담아서 리턴하면 된다
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return [.portrait, .landscapeLeft]
}
이렇게 고정하고 싶은 뷰컨트롤러가 네비게이션 컨트롤러 같은 상위뷰컨트롤러
를 가지는 경우
아무리 supportedInterfaceOrientations
프로퍼티를 재정의 해줘도 세로고정이 안된다.
왜냐하면 상위뷰컨의 세팅을 따르기 때문이다
*(참고로supportedInterfaceOrientations
의 default가 .all
이다)
class NavigationController: UINavigationController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
topViewController?.supportedInterfaceOrientations ?? .all
}
}
.portrait
을 반환해주면 해당 뷰컨에서만 세로고정이 된다override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
이런식으로 view controller마다 프로퍼티를 재정의해서 지원하는 방향을 설정할 수 있다
회전 여부를 결정하기 위해 시스템은 뷰컨트롤러가 지원되는 방향
과 앱이 지원하는 방향
을 비교한다.
앱이 지원하는 방향은 Info.plist
파일 또는 AppDelegate의 메서드인application(_:supportedInterfaceOrientationsFor:)
에 의해 결정된다
그 순서는 일단 Info.plist 에 있는 값을 기본으로 사용하고,application(_:supportedInterfaceOrientationsFor:)
메서드가 정의 되었다면 해당 메서드를 따른다.
shouldAutorotate
자동회전
설정을 의미하는 것 같다참고
오동나무 블로그 https://odong-tree.github.io/ios/2020/12/27/supportedInterfaceOrientations/
라자냐 블로그 https://velog.io/@wonhee010/특정-ViewController에서-화면-회전-처리