티스토리 뷰
iOS에서는 View가 화면에 나타나거나 사라질 때 호출되는 메서드들이 정의되어있다. 그중 오늘 시행착오를 겪은 viewWillAppear에 대한 글을 작성하려고 한다.
Declaration
func viewWillAppear(_ animated : Bool)
Discussion
이 메서드 이름 그대로 해석하게 되면 뷰가 곧 나올 것이라고 예상될 때 호출된다고 볼 수 있다. 이는 xcode에서 프로젝트를 생성 시 자동으로 생성되는 viewController.swift의 viewDidLoad 메서드와 큰 차이점이 있다. viewDidLoad는 처음 뷰가 나타날 때 한 번만 호출되지만 viewWillAppear은 뷰가 나타날 때마다 호출된다. 즉 뷰가 보일 때마다 새로운 작업을 하고 싶을 때 사용하면 좋다.
문제점
그런데 뷰가 나타날 때마다 호출되어야 할 viewWillAppear함수가 나타날 때마다 호출이 되지 않았다. 일단 문제가 생긴 것을 간소화한 실행화면을 보자.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
viewWillAppear이 호출 안됨
위의 화면은 흰색 배경의 화면에서 버튼을 누르면 주황색 배경의 화면을 띄우고 주황색 배경의 화면을 누르면 dismiss로 주황색 화면을 메모리에서 해제하는 방식의 코드를 실행한 화면이다. 흰색 화면의 뷰 컨트롤러에 viewWillAppear을 사용했고 호출될 때마다 "viewWillAppear"이라는 로그를 남기게 작성했지만 처음 띄워질 때를 제외하고는 다시 호출되지 않는 것을 볼 수 있다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
viewWillAppear 잘 호출됨
이를 수정한 화면이다. 이제는 흰색 배경의 화면이 나타날 때마다 viewWillAppear이 잘 호출되는 것을 볼 수 있다. 차이는 다음 화면을 불러낸 방식에 있다. 호출이 되지 않을 때는 full screen으로 다음 화면을 보인 것이 아니라 자세히 보면 화면에 흰색 화면이 숨겨져 있는 것을 볼 수 있다. 하지만 호출이 될 때는 full screen으로 다음 화면을 보여 흰색 화면이 아예 보이지 않는 것을 볼 수 있다. 하지만 둘 다 흰색 화면을 메모리에서 제거한 것이 아닌데 이러한 결과가 나타나게 되었다. full screen이 아닌 상태로 다음 화면을 불러내게 되면 이전 화면이 화면에 보인다고 판단하는 것 같다. 실제로 조금이지만 보이기도 했다. 이러한 결과는 내비게이션 뷰를 보이거나 모달로 뷰를 보이게 할 때도 같은 결과를 보였다.
Apple 공식 문서 - viewWillAppear에 보면 pop over 방식의 뷰 컨트롤러가 dismiss 된 후 viewWillAppear이 정의된 뷰 컨트롤러가 화면에 나타나게 되는 경우에는 viewWillAppear메서드가 호출되지 않는다는 정보가 있는데 이러한 문제를 말하는 것 같다.
만약 다음에 이러한 문제가 발생한다면 viewWillAppear가 정의된 뷰 컨트롤러를 사용하기 위해선 pop over방식의 뷰 컨트롤러에서 이동하는 방식은 피해야 오늘의 문제가 재발하지 않을 것 같다.
'iOS > iOS_Memo' 카테고리의 다른 글
| [iOS 앱개발] PhotoKit 사용법 - 스토리보드 없이 사진앱 만들기 - 2 (Photos) (0) | 2020.08.06 |
|---|---|
| [iOS 앱개발] 스토리보드 없이 컬렉션 뷰 만들기 - 스토리 보드 없이 사진앱 만들기 - 1 (0) | 2020.08.05 |
| [iOS 앱개발 프로그래밍] 스토리보드(Storyboard) 없이 iOS 앱 개발하기 - 2 (0) | 2020.07.27 |
| [iOS 앱개발 프로그래밍] 스토리보드(Storyboard) 없이 iOS 앱 개발하기 - 1 (0) | 2020.07.27 |
| [iOS 앱개발] textField에서 return키 눌렀을 때 이벤트 생성하기 (0) | 2020.07.24 |
- Total
- Today
- Yesterday
- 아이폰
- 코테
- 스위프트
- BFS
- DP
- 알고리즘
- 자료구조
- 프로그래밍
- Swift
- Publisher
- Combine
- mac
- 백준
- 앱개발
- 테이블뷰
- Apple
- OS
- 코딩테스트
- 문법
- Xcode
- pattern
- System
- dfs
- operating
- IOS
- design
- operator
- OSTEP
- document
- 동시성
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |