自定义过渡动画
1.iOS用户总是抱怨iOS视图过渡动画太少,但在iOS 7之后,这个问题已经不再是问题。因为iOS 7允许用户自定义视图过渡动画。
2.视图过渡,即视图之间的跳转,有两种情况:
- 树形结构导航,通过UINavigationController控制视图堆栈实现视图过渡
- 模态导航,通过UIViewController控制实现的。
3.使用开源框架:HUAnmator, git地址:https://github.com/cinkster/HUAnimator
树形结构导航
UIViewControllerTransitioning:视图控制器过渡类
UINavigationController:导航控制器类
一。UIViewControllerTransitioning:视图控制器过渡类
1.包含的字符串常量:
- UITransitionContextFromViewControllerKey:用于过渡上下文中,用于获得过渡前的视图控制器
- UITransitionContextToViewControllerKey:用于过渡上下文中,用于获得过渡后的视图控制器
- UITransitionContextFromViewKey:用于过渡上下文中,用于获得过渡前的视图
- UITransitionContextToViewKey:用于过渡上下文中,用于获得过渡后的视图
2.UIViewControllerAnimatedTransitioning:视图控制器动画过渡协议
应用:如果我们要自定义过渡动画,需要实现这个协议。
包含的方法:必须实现的方法: 执行自定义动画:- (void)animateTransition:(id )transitionContext; 设置动画执行的时间:- (NSTimeInterval)transitionDuration:(id )transitionContext; 其中,参数UIViewControllerContextTransitioning类封装过渡动画的上下文对象,通过这个对象
我们可以获得过渡前后的视图控制器 UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 可选方法: 动画结束的时候调用:- (void)animationEnded:(BOOL) transitionCompleted;3.UIViewControllerContextTransitioning:视图控制器过渡上下文协议
用于获得过渡前后的视图控制器:- (UIViewController *)viewControllerForKey:(NSString *)key; 用于获得过渡前后的视图:- (UIView *)viewForKey:(NSString *)key; 其中,参数key为上面的4个字符串常量
二。UINavigationController:导航控制器类
1.UINavigationControllerDelegate:导航控制器委托
- (id )navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC 其中:参数UINavigationControllerOperation包含三个常量: UINavigationControllerOperationNone, UINavigationControllerOperationPush, UINavigationControllerOperationPop,
模态导航自定义过渡动画
模态导航自定过渡动画需要在视图控制中实现UIViewControllerTransitioningDelegate协议,它在UIViewControllerTransitioning类中定义,上面树形结构导航提到过