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
- Swift
- Apple
- darkmode
- IOS
- rxswift
- Git
- UIButton
- Xcode
- Notification
- window
- 웹뷰
- Session
- Firebase
- 개발자
- error
- MacOS
- Archive
- mac
- FLUTTER
- JPA
- SwiftUI
- geofencing
- stack
- Code
- iOS16
- view
- Realm
- github
- 한글
- appstore
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
Swift ) 스플릿 뷰 감지 viewWillTransition - EEYatHo iOS 본문
반응형
iPad 멀티태스킹 지원 작업을 하다가,
당연하게도(?) Spilt View 에서 레이아웃이 깨지게 되었다.
Split View 변화를 감지하는 delegate가 당연히 있을 줄 알았는데,
엥 없네.. 완전 의외..
0. 스플릿 뷰 변화 감지하기
그냥 view의 frame 변화를 감지하는 UIViewController의 콜백으로 처리해야했다.
해당 콜백은 아래와 같다.
size는 변화 후 frame의 size이고,
애플문서 보니까 coordinator은 변화에대한 정보와,
애니메이션 커스텀이 가능하다고 한다. 와아~,,
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
// code
}
1. Did ( viewDidTransition )
그런데
will만 사용하기엔 부족한 부분이 발견되어서, ( 탭바의 layer를 수정하는 작업 등 )
did를 찾아보았지만,
지원해주는게 없네..
아래처럼 써주면 will, did 동시에 사용할 수 있다.
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
// will code
coordinator.animate(alongsideTransition: nil) { _ in
// did code
}
}
2. orientation 까지
기존엔 노티로 ( UIDevice.orientationDidChangeNotification )
Orientation 변화 감지용 싱글톤을 사용중이었는데,
viewWillTransition이 orientation도 같이 잡아준다.
기존에 쓰던거 갈아 엎어 버리고,
아래처럼 만들어서 깔끔해졌다.
viewWillTransition 굳
import UIKit
import RxSwift
extension HomeViewController {
/*
Split View 변화 감지. Orientation 변화까지 감지됨.
*/
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
FrameChangeManager.willChangePS.onNext(size)
coordinator.animate(alongsideTransition: nil) { _ in
FrameChangeManager.didChangePS.onNext(size)
}
}
}
class FrameChangeManager {
// frame 변화 후의 size만 알면 대응 가능할 경우 이 친구로,
static let willChangePS = PublishSubject<CGSize>()
// frame 변화 후 Layout까지 끝나야 하는 경우 (layer추가 등) 이 친구로 작업.
static let didChangePS = PublishSubject<CGSize>()
}
'iOS, Swift' 카테고리의 다른 글
Swift ) iOS15 NSInternalInconsistencyException, Invalid parameter not satisfying, UITextView Error - EEYatHo (0) | 2021.09.26 |
---|---|
Swift ) 아이폰 UDID 확인 - EEYatHo iOS (0) | 2021.09.23 |
Swift ) iPad 멀티태스킹, 스플릿뷰, 슬라이드오버 지원 -EEYatHo (0) | 2021.09.16 |
Swift ) 앱스토어 커넥트 dSYM 위치, 다운로드 안됨 - EEYatHo (0) | 2021.09.09 |
Swift ) WKWebView 영상 전체화면 안되게하기 - EEYatHo iOS (0) | 2021.09.08 |
Comments