iOS개발을 하다보면 UIViewController의 modalPresentationStyle이라는 인터페이스를 본 적이 있을 것이다.
모달뷰를 보여주기 위해 overCurrentContext, fullScreen 등을 사용해왔을 것이다.
팝업이 나오는 속도/출발점/배경색 애니메이션/크기 변경 등 UIModelPresentationStyle이 제공하지 않는 전환 애니메이션에 대한 고찰을 해본 사람이라면 transitioningDelegate 인터페이스가 본적이 있을 것이다.
transitioningDelegate의 규격에 따라 동작을 구현하면 화면 전환시 애니메이션을 커스텀 할 수 있다.
내가 참여하기 전에 iOS팀에선 전환 애니메이션을 UIView.animation을 이용해 한땀한땀 구현하고 있었다.
반복 구현이 싫고, 재활용을 좋아하는 나는 아래의 모듈을 만들어 배포한 적 있다.
https://github.com/saroby/ViewControllerTransitioningDelegator
transitioningDelegate를 동작하게 하기 위해서는
modalPresentationStyle을 custom으로 설정해야 한다는 걸 먼저 밝혀두겠다.
이번에 이 글을 쓰게 된 이유는 알수 없는 이유로 해당 기능이 동작하지 않아 3일 동안 고생했기 때문이다.
나는 평소처럼 위 코드를 삽입하는 것으로 커스텀 팝업 애니메이션을 구현하려 했지만, 아무리 시도해도 정의한 애니메이션이 나오지 않는 문제가 발생하고 있었다.
선언 위치가 잘못된 것인가라고 의심해서 코드위치도 바꿔보고 다양한 시도를 해봤지만 헛수고였다.
주말에도 수정을 시도 한 끝에 상속에서 문제가 발생한 건 아닐까 의심하게됐다.
디버깅을 해봤다.
아뿔싸.
모듈이 실행되지 않고 있었다.
위에서 밝혔듯 transitioningDelegate가 실행되기 위해서는 modalPresentationStyle가 custom으로 설정되어야 하는데 어디선가 바꿔주고 있다는 의심이 들었다.
내가 입사하기 이전부터 모든 UIViewController는 S2Base_VC를 상속해야한다는 암묵적인 룰이 있다.
작업중인 LiveProfileVC 클래스 또한 마찬가지였다.
부모 클래스를 따라가보니 modalPresentationStyle를 fullScreen으로 강제로 전환하는 코드가 포함되어 있었고, 이 부분이 문제라는 것을 확신했다.
위처럼 오버라이드 메서드에 코드를 옮겨주니 문제가 해결되었다.
야호!!!
이 문제 때문에 적지않은 개발시간이 소비되었다.
무분별한 상속은 항상 문제를 발생시킨다는 걸 확신한 사건이었다.