🔁 최종 정리 흐름도
[MainTabBarController] ← 앱의 rootViewController
│
▼
[DiarySheetViewController] ← .pageSheet 형식으로 띄워짐
│
▼ (버튼 눌러서 dismiss됨)
[PhotoDiaryViewController] ← NavigationController로 감싸져 전체화면으로 띄워짐
DiarySheetViewController 안에서 특정 버튼을 눌렀을 때 PhotoDiaryViewController를 전체화면으로 띄우면?
@objc private func photoDiaryTapped() {
dismiss(animated: true) {
let photoVC = PhotoDiaryViewController()
let nav = UINavigationController(rootViewController: photoVC)
nav.modalPresentationStyle = .fullScreen
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first,
let rootVC = window.rootViewController {
rootVC.present(nav, animated: true)
}
}
}
- DiarySheetViewController가 먼저 dismiss
- 그 후에 MainTabBarController (rootVC) 가 PhotoDiaryViewController를 navigation으로 감싸서 전체화면으로 띄움
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first,
let rootVC = window.rootViewController {
- 현재 앱의 가장 상위 계층 (rootViewController) 를 찾음
- 앱에는 보통 하나의 UIWindowScene과 하나의 UIWindow가 있고, 그 안에 rootViewController인 MainTabBarController가 있음
💡 이렇게 복잡하게 하는 이유는?
현재 컨텍스트(DiarySheetViewController)는 이미 시트(반만 보이는 화면)로 띄워져 있기 때문에, 그 위에서 또 present() 하면 이상한 계층 구조가 생길 수 있음
그래서 현재 시트를 먼저 닫고, 앱의 최상위 계층(rootVC) 에게 새로운 화면을 띄우게 만드는 구조입니다.
'Project > PhotoDiary' 카테고리의 다른 글
✅ A 이미지 위에 B 이미지를 올리고, 이동 범위를 이미 A 이미지 사이즈내로 하는 방법 (0) | 2025.06.24 |
---|---|
👌 컬렉션뷰내의 셀의 위치를 가운데로 오게 하는 방법 (0) | 2025.06.17 |