티스토리 뷰

흐름


코드를 보기전에 먼저 Navigation Controller가 어떻게 동작하는지 살펴보자.

Navigation Controller는 자신의 Root VC가 segue를 통해 다른 view를 보여주려고 하면 미리 정의된 특정 delegate함수를 통해 이 작업을 수행하도록 되어있다. 그리고 view transition(view전환)이 수행될 때 UIViewControllerAnimatedTransitioning이라는 프로토콜에 정의된 동작을 수행하는데 이 프로토콜을 override해서 우리가 원하는 동작을 수행하도록 변경할 수 있다.


2, 3번 동작을 override해서 우리가 원하는 모습으로 바꿀 것이다.



코드(SpreadTransitionDelegate)


TransitionDelegate

TransitionAnimation을 임의로 수정하기 위해서 SpreadTransitionDelegate를 정의한다. 크게 필요한 데이터는 없으므로 duration만 정의한다.


Spread Transition을 수행하는동안 필요한 데이터들을 수집할 수 있도록 각 ViewController에 사용할 프로토콜을 정의해보자. 이 실습에서는 UIImageView의 배경색만을 전달하도록 할 것이기 때문에 ImageView를 얻어올 수 있는 프로토콜 함수를 정의하고 RainbowViewController와 ColorViewController가 각각 상속받아 자신의 ImageView를 반환하도록 한다.


UIViewControllerAnimatedTransitioning을 상속받아 transition효과를 원하는 모습으로 바꿔보자.

  1. duration을 알려준다.

  2. UIViewControllerAnimatedTransition을 상속받아서 애니메이션을 구현한다.

  3. from/to view controller로부터 ImageView를 얻어와서 그 정보로 snapshotView를 만든다.


NavigationController의 TransitionDelegate로 사용하기 위해 UINavigationCotrollerDelegate를 상속받아 클래스를 확장한다.

  1. from/to view controller가 모두 우리가 정의한 SpreadViewController라면 이 Transition을 사용하도록 한다. (nil을 반환하면 default delegate를 사용하는것으로 보인다.)


이제 이 프로토콜을 사용하도록 RainbowCollectionCotroller와 ColorViewController를 수정하자.



Storyboard

코드로 instance를 만들어서 구현할 수도 있지만 우리 Naviagtion Controller는 특별한 기능 없이 Storyboard를 사용하기 때문에 storyboard로 object를 만들고 연결한다.

  1. object를 추가한다.

  2. object는 SpreadTransitioningDelegate를 상속받는다.

  3. Delegate를 연결한다.


모든 준비가 끝났다. 전체 프로젝트 코드는 여기에서 확인할 수 있다.



실행결과


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 31
글 보관함