[iOS] iOS13 Modal Style 및 Life Cycle

728x90

 

 

iOS13에도 많은 변화가 있었죠?

지난 포스트에는 변경 사항에 대한 이슈들을 정리해보았으니 미처 못보신 분들은 보시고 추가해야될 사항있으면 댓글 환영합니다. :)

 

많은 변화 가운에 이번 포스트에는 Modal라이프 사이클에 대해 적어보려고합니다.

 

💡Modal Presentation Style

iOS13부터 Modal presentation Style의 디폴트 값이 full screen이 아닌 'automaic'으로 변경되었습니다.

XCode11업데이트 후 13.0으로 빌드 해보니 모달 형식이 아래와 같이 'page sheet'형태로 나타나는걸 볼 수 있으셨을 겁니다.

 

그렇다면 automatic은 무엇일까요?

세로화면에선 page sheet, 가로화면에선 full screen형태의 타입을 나타냅니다!

 

즉, 디폴드가 automatic으로 바꼈으니 이전 버전의 모달형식처럼 full screen으로 바꿔야한다면 전체를 바꿔야합니다

vc.modalPresentationStyle = .fullScreen

 

💡modal의 라이프 사이클

FirstVC와 SecondVC 두가지의 뷰컨트롤러가 있고, FirstVC에서 어떠한 버튼을 눌렀을때 SecondVC modal이 나타난다고 가정해 보도록 하죠.

 

  • 기존의 fullscreen style의 모달 라이프 사이클

/* FullScreen Present */

-------------- [SecondVC : viewDidLoad] --------------

-------------- [FirstVC : viewWillDisappear] --------------

-------------- [SecondVC : viewWillAppear] --------------

-------------- [SecondVC : viewDidAppear] --------------

-------------- [FirstVC : viewDidDisappear] --------------

/* FullScreen Dismiss */

-------------- [SecondVC : viewWillDisappear] --------------

-------------- [FirstVC : viewWillAppear] --------------

-------------- [FirstVC : viewDidAppear] --------------

-------------- [SecondVC : viewDidDisappear] --------------

 

기존의 모달 형식은 위의 그림과 같이 FirstVC의 viewWillDisappear가 호출된 후 SecondVC의 라이프 사이클이 동작하며 View가 생성되고, FirstVC가 사라지게 됩니다.

즉, SecondVC가 나타나면 뒤에 FirstVC는 사라지게 되는걸 볼 수 있습니다.

 

  • sheet style의 모달 라이프

/* Sheet Present */

-------------- [SecondVC : viewDidLoad] --------------

-------------- [SecondVC : viewWillAppear] --------------

-------------- [SecondVC : viewDidAppear] --------------


/* Sheet Dismiss */

-------------- [SecondVC : viewWilldisappear] --------------

-------------- [SecondVC : viewDidDisappear] --------------

기존 fullscreen의 라이프 사이클과 다르게 firstVC에는 전혀 영향을 주지 않고 firstVC앞에 독립적으로 띄워지는 모달 형식인걸 볼 수 있습니다.

 

디폴트값이 automatic인 만큼 가로 세로 화면을 구현하는 앱일때 알아두시면 유용할 것 같네요. :)