ViewController之间的切换动画
一 、API介绍
iOS7开始,苹果推出了自定义转场动画API。从此,任何可以用Core Animation实现的动画,都可以出现在两个ViewController的切换之间
知识点图:
从上图可以看出,新的Api主要提供了2中VC切换方式,动画式切换,交互式切换。
二 、动画式切换,实现方法:
1,创建继承自NSObject并且声明 UIViewControllerAnimatedTransitioning的动画类;
1 2 3 4 | #import <UIKit/UIKit.h> @interface PagingTransition : NSObject <UIViewControllerAnimatedTransitioning> @end |
2,重载 UIViewControllerAnimatedTransitioning 中的协议方法。
#import "PagingTransition.h" @implementation PagingTransition //返回动画的时间 - (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext { return 1; } //在进行切换的时候将调用该方法,我们对于切换时的UIView的设置和动画都在这个方法中完成。 - (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext { UIViewController* toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIViewController* fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; [[transitionContext containerView] addSubview:toVC.view]; /** * 效果1 */ toVC.view.alpha = 0; [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ fromVC.view.transform = CGAffineTransformMakeScale(0.1, 0.1); toVC.view.alpha = 1; } completion:^(BOOL finished) { fromVC.view.transform = CGAffineTransformIdentity; [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; }]; /** * 另一种效果 */ // CGRect finalRect = [transitionContext finalFrameForViewController:toVC]; // // toVC.view.frame = CGRectOffset(finalRect, 0, [[UIScreen mainScreen]bounds].size.height); // // [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 usingSpringWithDamping:0.8 initialSpringVelocity:0.0 options:UIViewAnimationOptionCurveLinear animations:^{ // toVC.view.frame = finalRect; // } completion:^(BOOL finished) { // //5 // [transitionContext completeTransition:YES]; // }]; // } @end
3, 在ViewController中实现 UINavigationControllerDelegate 方法,并指定delegate。
self.navigationController.delegate = self;
#pragma mark-- UINavigationControllerDelegate - (id<UIViewControllerAnimatedTransitioning>) navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController*)fromVC toViewController:(UIViewController*)toVC { if (operation == UINavigationControllerOperationPush) { PagingTransition *ping = [PagingTransition new]; return ping; } return nil; }
三、交互式切换 ,会根据交互式手势来切换VC并同时播放动画效果。
参考: http://www.cocoachina.com/industry/20140623/8918.html
例子:https://github.com/PeteC/InteractiveViewControllerTransitions
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!