IOS7中ViewController切换动画

来源:互联网 发布:开发游戏的软件 编辑:程序博客网 时间:2024/06/17 21:36


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切换动画自定义的一些简单说明,博主文字功底不好,表述有不对请指正。



0 0
原创粉丝点击