iOS 在TabBarController视图切换的时候添加动画
2017-03-10 16:08
661 查看
iOS中TabBarController是很强大的控制器,使用起来也非常的方便,但是它点击tabbaritem切换视图时却不像navigation一样有种划入划出的效果,那么怎么在TabBarController控制器切换的时候添加动画呢?
在TabBarControllerDelegate中已经定义好了方法,我们可以在自己的TabBarController中实现这个协议中的方法,就可以在切换视图的时候加入动画效果。
TabBarControllerDelegate中有两个方法,这里先讲第一个
github地址:https://github.com/ColdChains/LAXTabBarControllerAnimation
一、创建一个类继承NSObject,实现协议UIViewControllerAnimatedTransitioning
创建TabBarController,设置代理,并实现UITabBarControllerDelegate的代理方法。
在animationControllerForTransitionFromViewController方法中返回刚才写的类的实例。
在TabBarControllerDelegate中已经定义好了方法,我们可以在自己的TabBarController中实现这个协议中的方法,就可以在切换视图的时候加入动画效果。
TabBarControllerDelegate中有两个方法,这里先讲第一个
github地址:https://github.com/ColdChains/LAXTabBarControllerAnimation
一、创建一个类继承NSObject,实现协议UIViewControllerAnimatedTransitioning
#import "AnimationManager.h" @interface AnimationManager () @end @implementation AnimationManager static UIView *presentingView; - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext { return 1.0; } - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { // 获取fromVc和toVc UIViewController *fromVc = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toVc = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView *fromView = [[UIView alloc] init];; UIView *toView = [[UIView alloc] init]; if ([transitionContext respondsToSelector:@selector(viewForKey:)]) { // fromVc 的view fromView = [transitionContext viewForKey:UITransitionContextFromViewKey]; // toVc的view toView = [transitionContext viewForKey:UITransitionContextToViewKey]; }else { // fromVc 的view fromView = fromVc.view; // toVc的view toView =toVc.view; } CGFloat x = [UIScreen mainScreen].bounds.size.width; if ([toVc.title isEqualToString:@"B"]) { x = -x;//根据title判断是从哪个控制器跳转到哪个控制器 设置动画的方向 } // 转场环境 UIView *containView = [transitionContext containerView]; toView.frame = CGRectMake(-x, 0, containView.frame.size.width, containView.frame.size.height); [containView addSubview:fromView]; [containView addSubview:toView]; [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ fromView.transform = CGAffineTransformTranslate(fromView.transform, x, 0); toView.transform = CGAffineTransformTranslate(toView.transform, x, 0); } completion:^(BOOL finished) { [transitionContext completeTransition:YES]; }]; } @end
创建TabBarController,设置代理,并实现UITabBarControllerDelegate的代理方法。
在animationControllerForTransitionFromViewController方法中返回刚才写的类的实例。
#import "DMMainViewController.h" #import "AnimationManager.h" @interface DMMainViewController ()<UITabBarControllerDelegate> @end @implementation DMMainViewController - (void)viewDidLoad { [super viewDidLoad]; self.delegate = self; [self setChildchildViewController:[[UITableViewController alloc] init] title:@"A"]; [self setChildchildViewController:[[UITableViewController alloc] init] title:@"B"]; // [self setChildchildViewController:[[UITableViewController alloc] init] title:@"C"]; // [self setChildchildViewController:[[UITableViewController alloc] init] title:@"D"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)setChildchildViewController:(UIViewController *)viewController title:(NSString *)title { viewController.title = title; UINavigationController *naviVc = [[UINavigationController alloc] initWithRootViewController:viewController]; [self addChildViewController:naviVc]; } // 实现协议 - (nullable id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController animationControllerForTransitionFromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC{ return [[AnimationManager alloc] init]; } @end
相关文章推荐
- Swift自定义iOS中的TabBarController并为其添加动画
- iOS Controller中视图切换动画效果
- ios 视图切换动画效果
- IOS视图切换实现简单动画
- iOS 模态视图和导航栏自定义切换动画与交互动画
- iOS开发笔记--视图切换的动画效果
- iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
- IOS UISplitViewController之 解决 密码框添加之后 调用子视图的转向方法之时 对象为空
- iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
- iOS7新特性 ViewController转场切换(二) 系统视图控制器容器的切换动画---push pop present dismis
- iOS_17_控制器切换_TabBarController_通过storyboard方式
- iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
- ios常用16种视图切换动画效果
- IOS视图切换动画效果<代码演示>
- IOS push一个新的controller的时候,视图叠加问题
- iphone ios UITabBarController 切换动画
- ios中多视图之间动画切换
- iOS:更改navigationController push和pop界面切换动画
- 视图ViewController之间的切换及动画设置
- 【iOS开发-24】导航控制器下不同视图控制器之间切换:利用CATrasition和view的layer层来实现自定义的动画效果