這篇文章與我前面寫的一篇文章"普通控制器的自定義轉(zhuǎn)場動畫的實現(xiàn)步驟-iOS"都是關于控制器的自定義轉(zhuǎn)場動畫的刊橘,前面一篇介紹了普通控制器的自定義轉(zhuǎn)場動畫的實現(xiàn)觅丰,這一篇則介紹導航控制器的自定義轉(zhuǎn)場動畫的實現(xiàn)啡邑。
在Object-C中淆九,控制器的轉(zhuǎn)場有兩類秀又,一類是導航控制器的push和pop喉誊,一類是普通控制器的present和dismiss画髓,這里只講導航控制器的轉(zhuǎn)場動畫缩举,普通控制器的轉(zhuǎn)場動畫前面已經(jīng)講過衣赶。
當我們調(diào)用[self.navigationController pushViewController:vc animated:YES]
或者[self.navigationController popViewControllerAnimated:YES]
時盛正,即可實現(xiàn)系統(tǒng)自帶的導航控制器的push和pop轉(zhuǎn)場動畫,但是有時候你可能想要別的效果屑埋,這個時候就需要我們自定義控制器的轉(zhuǎn)場動畫了
當你了解后,你會發(fā)現(xiàn)痰滋,導航控制器的自定義轉(zhuǎn)場動畫摘能,實現(xiàn)起來其實也很簡單。以下的gif圖里就是我實現(xiàn)的導航控制器的自定義轉(zhuǎn)場動畫敲街,這也是調(diào)用[self.navigationController pushViewController:vc animated:YES]
或者[self.navigationController popViewControllerAnimated:YES]
實現(xiàn)的效果哦团搞,跟系統(tǒng)的push,pop的效果明顯不一樣吧
如果想直接看代碼多艇,到github下載demo逻恐,實現(xiàn)步驟如下:
1.push前的控制器遵守導航控制器協(xié)議UINavigationControllerDelegate
2..push前的控制器成為導航控制器的代理self.navigationController.delegate = self
3.push前的控制器實現(xiàn)代理方法
-(id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController *)fromVC
toViewController:(UIViewController *)toVC
需要注意的是,代理方法返回的是一個遵守UIViewControllerAnimatedTransitioning協(xié)議的對象,這個對象負責轉(zhuǎn)場的動畫控制复隆,而這個協(xié)議里面又有兩個方法需要實現(xiàn)
1.動畫的時間:- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
2.動畫的具體實現(xiàn):- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
不同的動畫實現(xiàn)即控制著不同的效果拨匆,我這里push動畫是透明度和視圖的transform變化
這樣,導航控制器的push動畫即實現(xiàn)完成挽拂。當push前的控制器調(diào)用[self.navigationController pushViewController:vc animated:YES]
時惭每,就會有push動畫。當然現(xiàn)在還沒有實現(xiàn)pop動畫亏栈,pop動畫是在push后的控制器里實現(xiàn)台腥,實現(xiàn)步驟和push動畫類似,也是上面幾個步驟绒北,具體可看代碼黎侈。
聰明的你,了解實現(xiàn)步驟后是不是也很容易就可以做自己定制的push和pop動畫了呢闷游?