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

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


神奇移动.gif

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

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

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

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

#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.创建一个继承自<NSObject>的类,我这里命名为ImageAnimationTransition,并遵守<UIViewControllerAnimatedTransitioning>协议,并且在其中实现两个协议方法:

//动画的持续时间

- (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];

     }];

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容