์ด์ ๊ธ์์ PresentationController๊ฐ ๋ฌด์์ธ์ง ๋ฐฐ์ ๋ค. ๊ทธ๋ฐ๋ฐ, Transition Animator๋ฅผ ์ ๊ณตํ๋ ๋ถ๋ถ์์ UIViewControllerAnimatedTransitioning
์ด๋ผ๋ ์น๊ตฌ๋ฅผ ๋ณด์๋ค. ์ค๋์ ์ฃผ์ ๋ ์ด๋
์์ด๋ค.
UIViewControllerAnimatedTransitioning
Custom Transition์ ์์ด ํ์ํ animation์ ๊ตฌํํ๊ธฐ ์ํ method๋ค์ด ๋ชจ์ฌ ์๋ ํ๋กํ ์ฝ์ด๋ค. ์ด ํ๋กํ ์ฝ์ ์ฑํํ ๊ตฌํ์ฒด๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
ํด๋น Protocol์ method๋ฅผ ์ฌ์ฉํ๋ฉด, โ๊ณ ์ ๋ ์๊ฐ ๋ด์ VC๋ฅผ ํ๋ฉด๋ฐ์ผ๋ก ์ ํํ๊ธฐ ์ํ ์ ๋๋ฉ์ด์
์ ์ ์ํ ๊ฐ์ฒดโ๋ฅผ ๋ง๋ค ์ ์๋ค. ๋ํํ ๊ฐ์ ๊ฒฝ์ฐ UIViewControllerInteractiveTransitioning
๋ฅผ ํตํด ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋ค. ๊ตฌํํด์ผ ํ๋ method๋ค์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
transitionDuration(using:)
: Required
- Transition Animation์ Duration์ ์ง์ ํ๋ค.
animateTransition(using:)
: Required
- animation์ ์ ์ํด์ค๋ค.
- ์ํฉ์ ๋ง๋ ์ฌ๋ฌ ๋ค๋ฅธ animator๋ฅผ ์ ๊ณตํ ์๋ ์๋ค. (์๋ฅผ ๋ค์ด
.present
, .dismiss
)
๋ Method ๋ชจ๋ UIViewControllerContextTransitioning์ด๋ผ๋ Protocol ๊ตฌํ์ฒด๋ก๋ถํฐ Transition์ด ์ผ์ด๋๋ ๋์์ ์ ๋ณด๋ค์ ์ป์ ์ ์๋ค. ์ด๋ฅผ Transition Context๋ผ ํ๋ค. ๊ทธ ์์๋ ์ด์ ๊ธ์์ ์ค๋ช
ํ containerView
, Frame
์ ๋ณด, isInteractive
, isAnimated
๋ฑ๋ฑ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
Project
์ด์ ์ ๋ณด์๋ AppStore์ ์ฐ์ฅ์ ์์ ์์๋ณด๊ฒ ๋ค. ์ด์ ์ CardDetailViewController
๊ฐ UIViewControllerTransitioningDelegate
๋ฅผ ์ฑํํ๊ณ ์ฌ๊ธฐ์ 3๊ฐ์ method๋ฅผ ๊ตฌํํด์คฌ์๋๋ฐ, Presentation Controller์ ๊ด๊ณ ์๋ ๋ฉ์๋๊ฐ ๋ ์์๋ค.
์์ ๋ ๋ฉ์๋๊ฐ ๊ทธ๊ฒ์ด๋ค. ์ด์ ๊ธ์์๋ present, dismiss์ ๋ง๋ ๊ฐ๊ฐ์ animator๋ฅผ ์ ๊ณตํด์ฃผ์๋ค๊ณ ํ์๋ค. ์ด์ ๋ ์ ๋
์์ ์ค์ฒด๋ฅผ ํ์ธํ ์ฐจ๋ก์ด๋ค.
TodayAnimationTransition
์ผ๋จ ๊ธฐ๋ณธ ๋ฐ์ฐฌ๋ถํฐ ๋ณด์. animator์ ๊ด๋ จ๋ ๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ time interval์ ์ ์ํ์๊ณ , Type๊น์ง ๋๋ ์ ๊ด๋ฆฌํ๊ณ ์๋ค. ์ด๊ธฐํํ ๋, Type์ ์ ์ํ๋ฉด, ์ด์ ๋ง๋ Animator๋ฅผ ์ ๊ณตํ ์๊ฐ์ธ๊ฐ๋ณด๋ค.
์๊น ๋งํ๋ UIViewControllerAnimatedTransitioning
๋ฅผ ๊ตฌํํ ๋ Required๋๋ ๋๊ฐ์ method๋ฅผ ๊ตฌํํ๊ณ ์๋ค. animation ์ง์ ์๊ฐ๊ณผ, ์ด๋ค animation์ ์งํํ ๊ฒ์ธ์ง์ ๋ํ method์ด๋ค. ์ฝ๋ ์์ฑ์๋ type์ ๋ง๊ฒ ๋๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์๋ค.
์ค์ ์งํํ๋ code๊ฐ ์ฌ๊ธฐ์ ๋ด๊ฒจ์๋ค. ์ฌ์ค ์ด ๋ถ๋ถ์ ๋์ค์ ๊ตฌํํ๋ฉด์ ์ฝ์งํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ ์ค์ํ๋ค๊ณ ํ๋จํ์ฌ ์คํตํ๋ค.
Reference