三种ViewController跳转的异同(两种转场动画的实现待总结)
来源:互联网 发布:关于知乎的诗词 编辑:程序博客网 时间:2024/06/06 02:30
三种viewctroller跳转时的转场动画实现也不同。导航视图控制器的为系统默认。present和addChildViewController的方式的转场,前者可以用转场动画协议来实现,后者的转场动画可以用transitionFromViewController:toViewController:duration:options:animations:completion:来实现。这两种转场动画的实现机制待总结。
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
MainVC *mainVC = [[MainVC alloc] init];[self presentViewController:mainVC animated:YES completion:nil];
这种方式一般出现在需要使用者完成某件事情,如输入密码、增加资料等操作后,才能(回到跳转前的控制器)继续。例如系统的WIFI连接输入密码提示。默认动画是从下至上。
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
这种方式一般是使用者浏览资料,继而可以前进到下一个页面或回到上一个页面。默认动画是从右至左。
- (void)addChildViewController:(UIViewController *)childController
这个方法出现在iOS5以后,通过它即使不使用NavigationController也能够实现view hierarchy。有以下优点:
1.页面逻辑很清晰,相应的View对应相应的ViewController。
2.当某个子View没有显示时,将不会被Load,减少了内存的使用。
3.当内存紧张时,没有Load的View将被首先释放,优化了程序的内存释放机制。
#import "ViewController.h"#import "FirstVC.h"#import "SecondVC.h"#import "ThirdVC.h"@interface ViewController (){ FirstVC *firstVC; SecondVC *secondVC; ThirdVC *thirdVC;}@property (weak, nonatomic) IBOutlet UIView *contentView;@property (strong, nonatomic) UIViewController *currentVC;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. firstVC = [[FirstVC alloc] init]; secondVC = [[SecondVC alloc] init]; thirdVC = [[ThirdVC alloc] init]; [self addChildViewController:firstVC]; [self addChildViewController:secondVC]; [self addChildViewController:thirdVC]; [self.contentView addSubview:thirdVC.view]; self.currentVC = thirdVC;}- (IBAction)onClick:(id)sender { if(self.currentVC==firstVC && [sender tag]==1) { return; } if(self.currentVC==secondVC && [sender tag]==2) { return; } if(self.currentVC==thirdVC && [sender tag]==3) { return; } UIViewController *oldVC = self.currentVC; switch ([sender tag]) { case 1: { [self transitionFromViewController:self.currentVC toViewController:firstVC duration:1 options:UIViewAnimationOptionTransitionCurlUp animations:^{ } completion:^(BOOL finished) { if(finished) { self.currentVC = firstVC; } else { self.currentVC = oldVC; } }]; } break; case 2: { [self transitionFromViewController:self.currentVC toViewController:secondVC duration:1 options:UIViewAnimationOptionTransitionCurlUp animations:^{ } completion:^(BOOL finished) { if(finished) { self.currentVC = secondVC; } else { self.currentVC = oldVC; } }]; } break; case 3: { [self transitionFromViewController:self.currentVC toViewController:thirdVC duration:1 options:UIViewAnimationOptionTransitionCurlUp animations:^{ } completion:^(BOOL finished) { if(finished) { self.currentVC = thirdVC; } else { self.currentVC = oldVC; } }]; } break; default: break; }}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
- 三种ViewController跳转的异同(两种转场动画的实现待总结)
- 三种ViewController跳转的异同
- 三种ViewController跳转的异同
- 三种ViewController跳转的异同
- 三种ViewController跳转的异同
- 三种ViewController跳转的异同
- 三种ViewController跳转的异同
- 三种ViewController跳转的异同
- ios学习笔记:三种ViewController跳转的异同
- viewController自定义转场动画的实现
- ViewController的自定义转场动画
- ViewController转场动画的切换
- 自定义ViewController的转场动画
- android转场动画的两种方式
- Swift-->ViewController跳转,转场以及自定义动画
- viewcontroller跳转的动画风格
- 两步实现类似格瓦拉的转场动画
- 两步实现类似格瓦拉的转场动画
- 《leetCode》:Isomorphic Strings
- Java深克隆和浅克隆的原理及实现
- POJ 3768 Repeater
- Git远程操作详解
- iOS如何上传代码到Github
- 三种ViewController跳转的异同(两种转场动画的实现待总结)
- 【Linux学习】epoll详解
- ZooKeeper的工作流程
- UVa 679 Dropping Balls
- 对象数组
- 在 Linux 中永久修改 USB 设备权限
- matlab分割字符串(split)
- 表单提交小结
- 如何保护我的站点免受SQL入攻击——常见网站攻击手段原理与防御