Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ios
- WKWebView
- cocoapods
- 싱글턴패턴
- 옵저버패턴
- 스테이트패턴
- 템플릿메서드
- 데코레이터패턴
- 프록시패턴
- SWIFT
- 컴파운드패턴
- RxSwift
- 이터레이터패턴
- DispatchQueue
- 컴포지트패턴
- 스트래터지패턴
- 팩토리메서드패턴
- 상태패턴
- unowned
- 커맨드패턴
- 파사드패턴
- 어댑터패턴
- Lifecycle
- 추상팩토리패턴
- Xcode
- Mobile
- 디자인패턴
- 전략패턴
- ViewController
- Scenedelegate
Archives
- Today
- Total
ios dev kangwook.
iOS) Split View 본문
Split View 와 관련된 버그가 많이 들어오기도 하고, iOS13을 최소 버전으로 잡게되면 Scene을 적용시킬 수 있으므로, 한 번 짚고 넘어가려고 한다.
Split View
- iPadOS에서 사용되는 개념으로, UISplitViewController와는 다르다.
- Multiple Window의 한 종류로, Slide Over라고 하는 앱위에 창을 띄우는 듯한 윈도우와 비슷하다.
Split View같은 경우는 Scene이 도입된 iOS13버전에서 만들어졌고, Split View를 이해하려면 Scene의 Life Cycle을 알아야 한다.
Scene-Based Life Cycle
- Scene이 도입되면서, App 단위의 상태 변화 관리에서 Scene단위로 상태 변화를 관리한다.
- Scene은 각자 자신만의 Life Cycle이 있기 때문에 서로 다른 실행 상태에 있을 수 있다.
- 기존 App Delegate에 있던 Life Cycle에 관련된 함수들은 대응되어 Scene Delegate에서 그대로 쓸 수 있다.
- App Delegate는 Scene의 구성 및 삭제를 담당하게된다.(아래 메소드들을 필수적으로 구현해야 한다.)
- func application(_:,configurationForConnecting:options:)
- 새로운 Scene을 만들 때 사용할 UIKit의 configuration data를 검색한다.
- func application(_:,didDiscardSceneSessions:)
- 사용자가 앱 전환시 하나 이상의 앱 Scene을 닫았음을 delegate에게 전달한다.
- func application(_:,configurationForConnecting:options:)
- Life Cycle에 관련된 함수를 App Delegate와 Scene Delegate에 모두 구현시 자동적으로 iOS 버전을 보고 system이 각 버전에 맞는 함수를 한 쪽에서만 호출한다.
- SplitView의 가운데 구분선이 움직일 경우에는 두 개의 Scene 모두 Foreground-Inactive상태가 되고 다시 구분선을 놓았을 때는 Foreground-Active상태가 되는데, 이에 따라 적절히 메서드를 사용하면 되겠다.
- Split View에 각각 같은 앱의 Scene이 들어가 있으면 같은 메모리와 앱 프로세스 공간을 사용하고,
- 다른 앱이 들어가 있을 경우 독자적인 각각의 앱이라고 생각하면 된다.
Split View에서 Life Cycle 관련 메서드 테스트
Multiple Windows가 가능한 Test App을 개발
스플릿 뷰에 테스트앱을 각각 띄우고 다음을 테스트
- 가운데 구분선을 슬라이드 → 어떤 라이프 사이클 메서드를 호출하는지 확인
- Control Center, App Switcher등 각각 라이프 사이클에 관여하는 동작을 수행
예상 결과
- sceneWillResignActive와 sceneDidBecomeActive가 호출될 것으로 예상
실제 결과
- sceneWillResignActive, sceneDidBecomeActive가 호출되고 스플릿 뷰로 띄운 동일 앱도 로그가 출력된다.(즉, 디버깅이 같이되고 있다는 소리)
- 이는 Scene은 서로 다르지만 App자체는 동일한 메모리에서 동일한 프로세스를 사용하기 때문이라고 추정
추가
- SplitView 뿐만 아니라 Slide Over 또한 Split View와 같은 라이프 사이클을 지니고, Scene을 사용하고 독자적인 UI를 가지지만 실질적으로 App자체는 동일해서 로그는 같이 찍히게 된다.
'iOS' 카테고리의 다른 글
iOS) Architecture Pattern (0) | 2022.09.29 |
---|---|
iOS) Scene (0) | 2022.09.18 |
Xcode) project.pbxproj (0) | 2022.09.11 |
iOS) Memory Management - ARC (0) | 2022.08.27 |
iOS) App Life Cycle, View LIfe Cycle (0) | 2022.08.27 |
Comments