iOS 關(guān)于viewController自定義的轉(zhuǎn)場動畫

? ? ? 關(guān)于轉(zhuǎn)場動畫我也只是一個新人,最近也是正好需要用到才研究了下,發(fā)現(xiàn)這東西太好玩了,基本可以實現(xiàn)各種炫酷的轉(zhuǎn)場的特效,瞬間讓你的app高大上有沒有。

? ? ? View Controller 轉(zhuǎn)場是iOS7 引入的新特性自定義,也就是說只有ios7以后才能用吧,但是就目前來講基本可以忽略不兼容的情況。

首先:

iOS 7 自定義視圖控制器轉(zhuǎn)場的 API 基本上都是以協(xié)議的方式提供的。最主要的五個組件如下:

動畫控制器 (Animation Controllers)遵從UIViewControllerAnimatedTransitioning協(xié)議,并且負責實際執(zhí)行動畫。

交互控制器 (Interaction Controllers)通過遵從UIViewControllerInteractiveTransitioning協(xié)議來控制可交互式的轉(zhuǎn)場。

轉(zhuǎn)場代理 (Transitioning Delegates)根據(jù)不同的轉(zhuǎn)場類型方便的提供需要的動畫控制器和交互控制器。

轉(zhuǎn)場上下文 (Transitioning Contexts)定義了轉(zhuǎn)場時需要的元數(shù)據(jù),比如在轉(zhuǎn)場過程中所參與的視圖控制器和視圖的相關(guān)屬性。 轉(zhuǎn)場上下文對象遵從UIViewControllerContextTransitioning協(xié)議,并且這是由系統(tǒng)負責生成和提供的。

轉(zhuǎn)場協(xié)調(diào)器(Transition Coordinators)可以在運行轉(zhuǎn)場動畫時,并行的運行其他動畫。 轉(zhuǎn)場協(xié)調(diào)器遵從UIViewControllerTransitionCoordinator協(xié)議。

自定義轉(zhuǎn)場就是說,自己定義一個動畫,利用UIViewControllerAnimatedTransitioning動畫控制器,我們可以很方便的自己寫一個類并遵守UIViewControllerAnimatedTransitioning協(xié)議,然后完成相對應(yīng)的方法,主要是以下兩個方法

- (NSTimeInterval)transitionDuration:(id)transitionContext;動畫的執(zhí)行時間

- (void)animateTransition:(id)transitionContext;//動畫,我們就是要在這里面寫轉(zhuǎn)場的效果.

以下是demo里的一小段代碼


- (NSTimeInterval)transitionDuration:(id)transitionContext {? ?

return 0.7;//動畫執(zhí)行的時長

}

- (void)animateTransition:(id)transitionContext {? ? ?

? CATransform3D viewFromTransform = CATransform3DMakeRotation(M_PI/2, 0, 1, 0);? ? CATransform3D viewToTransform = CATransform3DMakeRotation(-M_PI/2, 0, 1, 0);? ? viewFromTransform.m34 = PERSPECTIVE;? ? viewToTransform.m34 = PERSPECTIVE;? ? ? UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];? ? UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];? ?

UIView *container = [transitionContext containerView];? ? ? ? //普通的左右滑動切換效果//? ?

BOOL goingRight = toVC.view.tag

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//四方立體柱轉(zhuǎn)換效果

[toVC.view.layer setAnchorPoint:CGPointMake(0, 0.5)];

[fromVC.view.layer setAnchorPoint:CGPointMake(1, 0.5)];

toVC.view.layer.transform = viewToTransform;

[container addSubview:toVC.view];

container.transform = CGAffineTransformMakeTranslation(container.frame.size.width/2.0,0);

[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{

fromVC.view.layer.transform = viewFromTransform;

toVC.view.layer.transform = CATransform3DIdentity;

[container setTransform:CGAffineTransformMakeTranslation(-container.frame.size.width/2.0, 0)];

} completion:^(BOOL finished) {

fromVC.view.layer.transform = CATransform3DIdentity;

toVC.view.layer.transform = CATransform3DIdentity;

[fromVC.view.layer setAnchorPoint:CGPointMake(0.5f, 0.5f)];

[toVC.view.layer setAnchorPoint:CGPointMake(0.5f, 0.5f)];

[container setTransform:CGAffineTransformIdentity];

[transitionContext completeTransition:YES];

}];

}

作為一個ios的小小工程師其實對這些api還不是很了解只能放出寫demo讓大家自己研究下了。


demo:https://github.com/taosiyu/TSYViewFromTo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容