iOS 自定义界面跳转动画

自定义非交互式动画:

今天看WWDC2014 scholarship的学生们的开源项目,看第一个项目就发现了这个东西,第一个项目看完了,顺便写一个关于自定义界面跳转动画的实现!

实现方法其实很简单,大概下面这几步:

1. 实现一个动画(动画效果及显示时长)
2. 在页面跳转的代理方法中使用这个动画
    A:页面跳转分为两种:
a:系统提供的例如push pop modal dismiss等主要是navgation和modal的跳转方法
b:用户自己控制的跳转方法,比如现在常见的从屏幕最左面向右慢慢滑动,页面就会跟着手势慢慢移动,当达到一定偏移量,页面完    全跳转

3.接下来我们实现一个简单的页面跳转,后面我们在添加一些可能会常用的功能:
A:实现一个动画效果: 
动画效果.h文件:
#import 
#import 

@interface ZYTransition1 : NSObject 

@end

动画效果.m文件:
#import "ZYTransition1.h"

@implementation ZYTransition1

// 转场时的动画动画设置和对View的设置都写在此方法中
- (void)animateTransition:(id)transitionContext {
    
//*****************动画效果1:渐渐消失中渐渐展现
    UIViewController *project = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIView *containerView = [transitionContext containerView];
    project.view.alpha = 0.0;
    CGRect frame = containerView.bounds;
    project.view.frame = frame;
    [containerView addSubview:project.view];
    [UIView animateWithDuration:0.9 animations:^{
        project.view.alpha = 1.0;
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:YES];
    }];
}

// 转场动画展现时间
- (NSTimeInterval)transitionDuration:(id)transitionContext {
    return 0.9;
}

@end



2.举例通过navgation的代理来使用这个动画:
先实现 navgationController的代理方法
    self.navigationController.delegate = self;
然后在其代理方法里使用这个动画
// 动画特效
- (id) navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC
{
        return [ZYTransition1 new];
}
这样的话,只要是通过navgationController来跳转的页面都会使用我们的这个动画了!

3.添加一些常见情况的常用功能:
比如,你想要在 push,pop,presented,dismiss中实现不同的动画也很简单:
先说navgation的,只要在navigationController的这个代理方法中做判断就行了
- (id) navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC
{
    if (operation == UINavigationControllerOperationPush) {
        return Push的动画;
    }else if (operation == UINavigationControllerOperationPop){
        return Pop的动画;
    }else{
        return OperationNone的动画;
    }

}


如果是modal呢,也是一样的代理,只要在Transitioning的代理方法中来实现这个动画就好了:
@protocol UIViewControllerTransitioningDelegate 

@optional
- (id )animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source;

- (id )animationControllerForDismissedController:(UIViewController *)dismissed;

- (id )interactionControllerForPresentation:(id )animator;

- (id )interactionControllerForDismissal:(id )animator;

- (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(UIViewController *)presenting sourceViewController:(UIViewController *)source NS_AVAILABLE_IOS(8_0);

@end

demo下载

Demo的链接:
链接: http://pan.baidu.com/s/1sjnu921 密码: ljg8

Presented

Presente











你可能感兴趣的:(iOS 自定义界面跳转动画)