티스토리 뷰
일반적으로 앱을 실행한 후
휴대폰을 가로나 세로로 회전하는 경우
화면이 자동으로 돌아가시는 걸 많이 보셨을겁니다.
하지만 자동으로 회전하다보면 화면이 이상하게 나오는 경우도 많고
원하는 기능을 사용할때 불편할 수 있기 때문에
오늘은 화면을 회전하지 못하게 막는 방법을 올려볼까합니다.
일단 테스트를 위해 간이 프로젝트를 만들었습니다.
뷰는 총 3개로 되어있고 각 뷰의 구분을 위해 바탕색을 다르게 했습니다.
* 고정 전 모습 *
1. 전체 고정하기
* AppDelegate 에 아래 부분을 추가해주세요.*
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
.
.
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
//이 함수를 추가해주세요.
// 세로방향 고정
return UIInterfaceOrientationMask.portrait
}
.
.
}
원하시는 방향으로 넣어주시면 됩니다.
- UIInterfaceOrientationMask.landscape : 가로로 고정 (동영상 볼때 생각하면 편해요)
- UIInterfaceOrientationMask.portrait : 세로로 고정 (일반적인 모양)
- UIInterfaceOrientationMask.all : 자동 회전 (모든 방향 가능)
2. 부분 고정 혹은 예외 설정
하시다보면 고정을 풀거나 특정 화면만 예외로 하고 싶은 경우가 있습니다.
예를 들어 저는
노란 화면(HorizViewController)은 가로로 고정하고
보라색 화면(VerticalViewController)은 세로로 고정하고
그 외의 화면은 회전이 가능하게 만들겠습니다.
이 경우 아래처럼 시도할 수 있습니다.
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if let viewController = window?.rootViewController?.presentedViewController{
if(viewController.isKind(of: HorizViewController.self)){
return UIInterfaceOrientationMask.landscape // 가로 고정
}
if(viewController.isKind(of: VerticalViewController.self)){
return UIInterfaceOrientationMask.portrait //세로 고정
}
}
// 다른 뷰는 자동회전 허용
return UIInterfaceOrientationMask.all
}
실제로 코드를 실행해보면 아래처럼 잘 작동하는걸 알 수 있습니다.
화면을 고정하는 부분은 많이 올라와 있긴 하지만
특정 화면의 회전을 풀거나 제한하는 부분은 찾기 힘들더라고요.
(사실 그냥 간단히 생각하면 되는거였는데...)
그래서 한번 정리해서 올려봅니다.
오늘도 파이팅입니다.
* 참고
나는 그런거 복잡하게 코드 필요없고 모든 화면을 간단히 고정하고 싶다
하시는 분들은
Project > Targets > General > Deployment Info 에서 체크 해제 해주시면 됩니다.
'iOS개발 > Swift 기본' 카테고리의 다른 글
Swift UITabBarController 상단에 선 추가하기 (0) | 2022.12.30 |
---|---|
Swift UITabBarController 위쪽 선 없애기 (0) | 2022.12.28 |
Swift UIViewController 이동할 때 값 전달하기 (0) | 2022.12.15 |
Swift ViewController 관련 내가 자주 쓰는 부분 (생각보다 편함) (0) | 2022.12.12 |
Swift 반복 이벤트 설정 (Timer) (0) | 2022.12.09 |