iOS-转场动画之神奇移动效果

今天来做一下神奇移动效果,利用了present的转场动画:


神奇移动.gif

我总结了一下使用转场动画的过程:(假设是从VC1 present VC2)

1.设置VC1的transitioningDelegate = self,并遵守协议

2.present到VC2之前,设置VC2的transitioningDelegate,并遵守 协议 (这里你可以共有一个对象完成协议的方法,也可以分别用两个对象完成对应的协议方法)

3.凡是遵守协议的对象,都要实现下面其中一个方法:

#pragma mark - UIViewControllerTransitioningDelegate

//这个是VC1应该实现的方法,因为VC1是present

- (id)animationControllerForPresentedController:(UIViewController*)presented presentingController:(UIViewController*)presenting sourceController:(UIViewController*)source{

return [ImageAnimationTransition transitionAnimationWithType:KAnimationTypePresent];

}
//这个是VC2应该实现的方法,因为VC2是dismiss

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

return [ImageAnimationTransition transitionAnimationWithType:KAnimationTypeDismiss];

}

4.创建一个继承自的类,我这里命名为ImageAnimationTransition,并遵守协议,并且在其中实现两个协议方法:

//动画的持续时间

- (NSTimeInterval)transitionDuration:(id)transitionContext{

    return0.7;

}
/*

要实现的动画的逻辑

这里要注意的是:(所谓容器,指UIView* containerView = [transitionContext containerView];)

        1.present时,必须在容器中addSubView:toVC.view

        2.dismiss时,必须在容器中addSubView:fromVC.view

        3.当你完成你的动画逻辑之后,必须告诉上下文去结束动画,即:[transitionContext completeTransition:YES];

*/

- (void)animateTransition:(id)transitionContext{

     [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{

     }completion:^(BOOL finished) {

          [transitionContext completeTransition:YES];

     }];

}

你可能感兴趣的:(iOS-转场动画之神奇移动效果)