今天来做一下神奇移动效果,利用了present的转场动画:

我总结了一下使用转场动画的过程:(假设是从VC1 present VC2)
1.设置VC1的transitioningDelegate = self,并遵守<UIViewControllerTransitioningDelegate>协议
2.present到VC2之前,设置VC2的transitioningDelegate,并遵守 <UIViewControllerTransitioningDelegate>协议 (这里你可以共有一个对象完成协议的方法,也可以分别用两个对象完成对应的协议方法)
3.凡是遵守<UIViewControllerTransitioningDelegate>协议的对象,都要实现下面其中一个方法:
#pragma mark - UIViewControllerTransitioningDelegate
//这个是VC1应该实现的方法,因为VC1是present
- (id)animationControllerForPresentedController:(UIViewController*)presented presentingController:(UIViewController*)presenting sourceController:(UIViewController*)source{
return [ImageAnimationTransition transitionAnimationWithType:KAnimationTypePresent];
}
//这个是VC2应该实现的方法,因为VC2是dismiss
- (id)animationControllerForDismissedController:(UIViewController*)dismissed{
return [ImageAnimationTransition transitionAnimationWithType:KAnimationTypeDismiss];
}
4.创建一个继承自<NSObject>的类,我这里命名为ImageAnimationTransition,并遵守<UIViewControllerAnimatedTransitioning>协议,并且在其中实现两个协议方法:
//动画的持续时间
- (NSTimeInterval)transitionDuration:(id)transitionContext{
return0.7;
}
/*
要实现的动画的逻辑
这里要注意的是:(所谓容器,指UIView* containerView = [transitionContext containerView];)
1.present时,必须在容器中addSubView:toVC.view
2.dismiss时,必须在容器中addSubView:fromVC.view
3.当你完成你的动画逻辑之后,必须告诉上下文去结束动画,即:[transitionContext completeTransition:YES];
*/
- (void)animateTransition:(id)transitionContext{
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
}completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
网友评论