您的位置:首页 > 移动开发 > IOS开发

iOS中用在导航控制器的转场动画(pop,push动画)制作

2015-11-13 22:14 856 查看
新建了一个CustomTransization动画类继承自
UIPercentDrivenInteractiveTransition

并遵守<UIViewControllerAnimatedTransitioning,UINavigationControllerDelegate>协议

创建动画代理初始化方法并传入导航控制器:

- (instancetype)
initWithNavigationController:(UINavigationController*)nc

{

self = [superinit];

if (self)
{

nc.delegate=

self;

}

return
self;

}

实现动画代理:

#pragma mark - UIViewControllerAnimatedTransitioning protocol

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{

UIViewController
*fromVC = [transitionContext
viewControllerForKey:UITransitionContextFromViewControllerKey];

UIViewController
*toVC = [transitionContext
viewControllerForKey:UITransitionContextToViewControllerKey];

UIView
*containerView = [transitionContext
containerView];

containerView.backgroundColor= [UIColorwhiteColor];

[containerView
addSubview:toVC.view];

CGRect
fromFrame = fromVC.view.frame;

CGRect
toFrame = toVC.view.frame;

fromFrame.origin.x=
-fromFrame.size.width;

toFrame.origin.x=
containerView.frame.size.width;

[toVC.viewsetFrame:toFrame];

toFrame.origin.x=

0;

[UIViewanimateWithDuration:[selftransitionDuration:transitionContext]

delay:0

usingSpringWithDamping:0.6f

initialSpringVelocity:15

options:UIViewAnimationOptionCurveEaseIn

animations:^{

[fromVC.viewsetFrame:fromFrame];

[toVC.viewsetFrame:toFrame];

}
completion:^(BOOLfinished)
{

[transitionContext
completeTransition:YES];

}];

}

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{

return
0.5;

}

#pragma mark - UINavigationControllerDelegate

/**

*
关键实现这俩个方法
UINavigationControllerOperation包含了push还是pop的信息

*/

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController*)navigationController

animationControllerForOperation:(UINavigationControllerOperation)operation

fromViewController:(UIViewController*)fromVC

toViewController:(UIViewController*)toVC
{

return
self;

}

- (id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController*)navigationController

interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController

{

return
nil;

}

在需要的控制器创建动画代理对象
@property (nonatomic,strong)CustomTransization
*transition;
self.transition
= [[CustomTransizationalloc]initWithNavigationController:self.navigationController];

直接执行跳转就可以显示动画了
SecondViewController
*sec = [[SecondViewControlleralloc]init];
[self.navigationControllershowViewController:secsender:sec];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: