0%

UIView lifecycle

UIView lifecycle, Present, Full & Card Screen

UIViewController lifecycle

  • init() - 생성
  • viewDidLoad (뷰가 로드됨) -> 초기화작업 / 메모리상에서의 로드 / 뷰가만들어질때 한번만 호출
  • viewWillAppear (뷰가 나타날것) -> 보여지기직전에 호출 / 보여질때마다 호출
  • viewDidAppear (뷰가 나타났다) -> 뷰가 화면에 나타난 직후 / 보여진직후에 호출
  • viewWillDisappear (뷰가 사라질 것이다) -> 뷰가 사라지기 직전
  • viewDidDisappear (뷰가 사라졌다) -> 뷰컨트롤러가 뷰가 제거되었음을 알려줌 / 사라진직후
  • deinit() - 해제

스크린샷 2019-12-07 오후 9.14.46

버튼을 사용해서 다음화면으로 넘어갈때의 뷰생명주기를 확인해보자 ( ios12버전)

  • 첫화면이 뜨자 나타나는 함수
1
2
3
viewDidLoad--[뷰가로드됨]
viewWillAppear--[뷰가나타날것임]
viewDidAppear--[뷰가나타났다]
  • 버튼을 클릭시 나타나는 함수
1
2
3
4
5
6
----------- [ Nextvc viewDidLoad ] ----------

viewWillDisappear--[뷰가사라질것임]
Nextvc viewWillAppear--[뷰가나타날것임]
Nextvc viewDidAppear--[뷰가나타남]
viewDidDisappear--[뷰가사라졌다]
  • Next View에서 버튼을클릭해서 첫화면으로 돌아가면 나타나는 함수
1
2
3
4
5
6
Nextvc viewWillDisappear--[뷰사라질것]
viewWillAppear--[뷰가나타날것임]
viewDidAppear--[뷰가나타났다]
Nextvc viewDidDisappear--[뷰사라짐]

------------- [ NextVc deinit: 메모리상의삭제됨 ] -----------

뷰생명주기

버튼을 사용해서 다음화면으로 넘어갈때의 뷰생명주기를 확인해보자 ( ios13버전)

card style

1
2
isModalInPresentation = true // 드래그로 끌어내려도 화면이 내려가지 않음
// FirstVC에서 넘겨줄때 사용해도되고, secondVC에서 직접 사용 할 수있음

Presenting(나를 띄운!!!) vs Presented(내가 띄운!!!)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
presentingViewController?.view.backgroundColor = .orange
// 나를 띄운놈에게 접근해서 그놈의 값, 동작을 바꿔줄 수 있음
presentedViewController?.view.backgroundColor = .black
// 내가 띄운놈에게 접근해서 값, 동작 변경도 가능

// nextView -> View
presentedViewController -> nil // 내가띄운것 - nextvc -> 없음
presentingViewController -> ViewController // 나를띄움놈 - viewvc -> nextvc

// FiestVc -> SecondVC -> ThirdVC
presentingViewController?.presentingViewController.view.backgrond
// 3번뷰에서 1번뷰의 변경시 단계를거쳐서 가는 방법이있음

// 3번에서 단계를 거치지않고 바로 닫고싶을경우
presentingViewController?.presentingViewController?.dismiss(animated: true)
  • 나를띄운놈에게 접근해서 그클래스의 프로퍼티에 접근하려했더니 되지않음.
  • presentingViewController -> UIView속성이고 나는 그 부모를 이용해서 view를 만들었기때문에 내가만든 클래스의 프로퍼티에 presentingViewController사용해서 접근할수는 없음.
  • 타입캐스팅을 통해 내가띄운놈이 ViewController이 맞는지 물어보고 맞다면 vc변수로 사용을하겠다. 그리고 그것에서 프로퍼티에 접근해서 변경해줄수 있다.
1
2
guard let vc = presentingViewController as? ViewController else { return }
vc.button.setTitle("클릭", for: .normal)

ios12버전의 뷰방식(Full Screen)

스크린샷 2019-12-07 오후 9.00.54

1
2
nextVC.modalPresentationStyle = .fullScreen //풀스크린모드 (#available(iOS 12.0, *))
nextVC.modalPresentationStyle = .automatic //오토메틱모드 (#available(iOS 13.0, *)) = 카드형

ios 13버전의 Card style

ios modalstyle