기어가더라도 제대로
UIViewController 본문
개인 공부 목적의 글입니다. 개선 환영합니다.
학습 목표
* 역할과 의의
* 기초 용어
* Window와 RootViewController
* View와 Controller의 관계
* 뷰 라이프 사이클
* Modal과 Transition
View Controller의 역할
- 뷰의 계층 관리
- 뷰와 데이터 사이의의 매개체
- 메모리등 자원 관리(언제 메모리에 올릴지, 내릴지)
- 화면 사이즈, 회전에 대한 대응
MVC에서의 C
- MVC 패턴에서 C를 담당합니다.
- 화면 전체 콘텐츠를 담당하거나 특정영역을 담당합니다.
- 내부 프로퍼티로 모델 객체를 포함하기도 합니다.
- 대부분은 View Controller의 흐름으로 구성
주요 콜백
화면 전환에 관련된 콜백
- viewDidLoad() : 메모리에 뷰 컨트롤러를 올림
- viewWillAppear(Bool) : 곧 화면에 나타날 것을 알림
- viewDidAppear(Bool) : 화면에 나타났음을 알림
- viewWillDisappear(Bool) : 곧 화면에서 사라질 것을 알림
- viewDidDisappear(Bool) : 화면에서 사라졌음을 알림
화면 회전에 관한 콜백
- shoulAutorotate() : 화면 전환을 자유자재로 한 건지..
- interfaceOriented ~ : ?
- 하나 더있는데 놓쳤습니다...
윈도우 씬, 윈도우와 Root View Controller
사실 이 부분이 개념이 와닿질 않습니다..
- Window Scene : 멀티신을 지원하는 부분?? 어떤 영역에 대한 경계정보만을 담는 느낌
- window : rootViewController.view를 띄우기전에 검정 배경만 있는 부분, 화면에 보이는 콘텐츠를 제공하지 않습니다. 화면에 보이는 모든 콘텐츠는 앱의 스토리보드에서 구성하는 rootViewController에서 제공합니다. UIWindow의 역할은 UIKit에서 이벤트를 수신하고, 관련된 이벤트를 루트 뷰 컨트롤러 및 관련 뷰에 전달하는 것입니다. 간단하게 말하자면, UIWindow 는 앱의 뷰 계층 구조에서 최상단에 고정되어 위치하며, 앱의 화면 콘텐츠에 대한 컨테이너 역할을 합니다. 앱의 뷰, 뷰 컨트롤러와 함께 작동하여 화면에 표시되는 뷰 계층 구조에 터치 이벤트를 전달하고, 화면 방향 변경과 같은 변경 사항을 관리합니다.
- rootviewcontroller.view : 실제로 보이는 콘텐츠를 담고 있는 부분.
Scene, UIScene, UIWindow Scene
Custom View Controller
view 계층 구조에 맞춰서 뷰 컨트롤러를 다루기
- UIViewController의 서브 클래스
- 상속을 받아서 원하는 동작 구현
- 필요한 APT Method를 오버라이드(Override)하여 사용
- 자신만의 비지니스 로직 추가
- 앱의 동작 흐름에 맞추기
Modal Presenting VS Presented, Modal Presentation style
다음 화면을 어떻게 띄울 것인지, 서로에 대한 관계
- rootViewController.view 가 띄운 화면(presented) > 파랑화면
- 자신을 띄우는 화면(presenting) > rootViewController.view
출처 : 코드스쿼드 내부 강의자료(비공개 영상)
다양한 Modal Presentation style이 있는데 시도를 해보는 것이 좋겠다.
System View Controller
빌트인 되어있는 뷰 컨트롤러이다. 예를 들어 이미지를 담는 컨트롤러라든지, 공유할 때의 뷰들을 담고있는 뷰컨트롤러라든지, 프린트를 할 때 뷰, 뷰 내부에 단어를 찾을 때의 뷰(cmd + f)들을 가정하고 특정 상황에 맞춰 시스템에 내장되어있는 뷰컨트롤러이다. 어떤 비지니스 로직을 구현하기 전에 이미 있는지 확인 하는 것이 중요한 것같다.
'UIKit 기초' 카테고리의 다른 글
Navigation controller 를 코드로 구현하기(feat. Storyboard) (0) | 2022.03.23 |
---|---|
UIImagePickerController (0) | 2022.03.18 |
UIButton 의 title을 코드로 바꾸기 (0) | 2022.03.14 |
UIGestureRecognizerDelegate (0) | 2022.03.12 |
Container View Controller (0) | 2022.02.18 |
Comments