IOS的API给出了两种切换ViewController方式:
1、
- (void)presentViewController: animated: completion:
- (void)dismissViewControllerAnimated: completion:
2、(这里不做展开)
- (void)pushViewController: animated:
- (UIViewController *)popViewControllerAnimated:
IOS7可以自定义这两种方式的切换动画,要怎样实现呢?首先就要说下@Protocol UIViewControllerAnimatedTransitioning这个协议。
UIViewControllerAnimatedTransitioning协议需实现以下方法:
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext 在这里根据上下文(UIViewControllerContextTransitioning)返回切换动画时间。
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext 在这里根据上下文自定义切换动画。
上面提到的上下文UIViewControllerContextTransitioning,其为开发者提供了切换相关的内容,包含从哪儿ViewController切换到哪个ViewController的相关信息。这个API的重要方法包括:
- (UIViewController *)viewControllerForKey:(NSString *)key 通过提供一个key来获取切出或切入的Viewcontroller,SDK中key包括有UITransitionContextFromViewController和UITransitionContextToViewController 分别表示切出切入。
- (UIView *)containerView 切换发生时的容器,开发者应该- (void)animateTransition:方法中将切出ViewController总容器中移除,将切入ViewController添加到容器中。
- (CGRect)initialFrameForViewController:(UIViewController *)vc 获取某个ViewController的初始frame
- (CGRect)finalFrameForViewController:(UIViewController *)vc 获取某个ViewController切换结束时的frame
- (void)completeTransition:(BOOL)didComplete 报告切换已经完成
以上介绍完UIViewControllerAnimatedTransitioning协议的一些方法以及相关的一些信息,下面将讲UIViewControllerAnimatedTransitioning该怎样用。
1、首先是在开头处提到的第一种切换方式中使用UIViewControllerAnimatedTransitioning来自定义切换动画。
要讲这个,得先了解 UIViewControllerTransitioningDelegate,通过实现这个协议的两个方法(切入ViewController的transitioningDelegate需设置为实现改协议的对象):
- (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
{
return self.drawerAnimation;
}
- (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
return self.popAnimation;
}
两个方法返回UIViewControllerAnimatedTransitioning对象实现自定义切换动画。
2、第二种切换方式使用UIViewControllerAnimatedTransitioning实现自定义切换动画。
这种切换方式是通过UINavigationController来实现的,可自定义实现UINavigationControllerDelegate的UINavigationController来自定义切换动画,自定义的UINavigationController实现一下方法:
- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC
{
if (operation == UINavigationControllerOperationPush) {
return self.drawerAnimation;
}
return self.animation;
}
通过operation分辨push还是pop来分别实现切入切出动画,同样,这个方法返回UIViewControllerAnimatedTransitioning对象。
以上是对IOS7的ViewController切换动画自定义的一些简单说明,博主文字功底不好,表述有不对请指正。