ViewController转场动画的切换

关于转场动画的切换这方便一直想研究好久了,但是奈何都下不了决心,

http://blog.csdn.net/hmt20130412/article/details/39079905 这篇博客对于转场动画,我认为讲解得比较详细了

在iOS7中,苹果官方提供了几个关键性的API,我这边再次简单总结下

1.为转场提供动画的API (UIViewControllerAnimatedTransitioning<播放动画>,UIViewControllerInteractiveTransitioning<交互动画,暂时还没研究>)

提供一个很垃圾的转场动画

//动画持续的时间
- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext {
    return 1.0f;
}


//动画
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext {
    
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController *fromConntroller = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    
    
    if ([transitionContext respondsToSelector:@selector(viewForKey:)]) {
        
        UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
        [[transitionContext containerView] addSubview:toView];
        
    }else {
        [[transitionContext containerView] addSubview:toViewController.view];
    }
    
    toViewController.view.alpha = 0.0f;
    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        
        if (self.type == PushingTypePush) {
            //fromConntroller.view.transform = CGAffineTransformMakeTranslation(320, 0);
            fromConntroller.view.transform = CGAffineTransformMakeScale(0.5,0.5 );
            toViewController.view.alpha = 1.0;
        }
        if (self.type == PushingTypePop) {
//            toViewController.view.frame = [UIScreen mainScreen].bounds;
            toViewController.view.transform = CGAffineTransformMakeScale(1,1);
            toViewController.view.alpha = 1.0f;
        }
        
    } completion:^(BOOL finished) {
        
        //申明动画已经结束 这个地方一定一定要记住的
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
        
    }];
    
}

 

2.转场代理,个人理解是,在这些代理中提供转场动画的时机,并在里面返回需要播放的转场动画,有三种形式的API<UINavigationControllerDelegate,UIViewControllerTransitioningDelegate,UITabBarControllerDelegate>

以navigation为例子

//动画转场
- (nullable id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                            animationControllerForOperation:(UINavigationControllerOperation)operation
                                                         fromViewController:(UIViewController *)fromVC
                                                           toViewController:(UIViewController *)toVC  NS_AVAILABLE_IOS(7_0) {
    
    LIUAnimationManager *manage = [LIUAnimationManager shareManager];
    AnimationTime time = AnimationTimePush;
    if  (operation == UINavigationControllerOperationPush) {
        time = AnimationTimePush;
    }
    if  (operation == UINavigationControllerOperationPop) {
        time = AnimationTimePop;
    }
    
    return [manage transitionWithAnimationType:AnimationTypeCustom AndAnimationTime:time];
    
}

//然后就OK了的
主要就是这几个关键性的API 

 

posted on 2015-10-09 16:21  飞羽的幸福  阅读(245)  评论(0编辑  收藏  举报

导航