UIViewController的生命周期
- (void)loadView{} 用于创建self.view
- (void)viewDidLoad{} self.view创建完毕
- (void)viewWillAppear:(BOOL)animated{}视图即将显示
- (void)viewDidAppear:(BOOL)animated{} 视图已经显示
- (void)viewWillDisappear:(BOOL)animated{} 视图即将消失
- (void)viewDidDisappear:(BOOL)animated{} 视图已经消失
- (void)didReceiveMemoryWarning{} 内存不足 警告
视图之间的模态跳转
//在这里进行模态跳转 SecondViewController * secondVC = [[SecondViewController alloc]init]; //设置跳转模式 样式 secondVC.modalTransitionStyle =UIModalTransitionStylePartialCurl; /* typedef NS_ENUM(NSInteger, UIModalTransitionStyle) { UIModalTransitionStyleCoverVertical = 0, //向上覆盖 UIModalTransitionStyleFlipHorizontal __TVOS_PROHIBITED, //翻转 UIModalTransitionStyleCrossDissolve, //渐变 UIModalTransitionStylePartialCurl NS_ENUM_AVAILABLE_IOS(3_2) //翻页__TVOS_PROHIBITED, }; */ //下面是进行模态跳转 //第一个参数 是要跳转到的视图控制器 //第二个是 动画的有无 //第三个是一个block 作用为跳转完成后的回调 完成后执行block [self presentViewController:secondVC animated:NO completion:^{ NSLog(@"跳转完成"); }];
//模态回跳 [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"回跳完成"); }];
设置自定义的动画
//导入头文件 #import <QuartzCore/QuartzCore.h> //创建一个动画 CATransition * transition = [[CATransition alloc]init]; //设置动画时间 transition.duration = 0.3; //设置动画 //跳转方向 transition.subtype = @"fromRight"; //跳转类型 transition.type = @"push";//cameraIres [self.view.superview.layer addAnimation:transition forKey:nil];
视图容器 相当于rootVC下还有两个视图控制器对象
//创建三个视图控制器对象 //设定rootVC为容器视图控制器 RootViewController * rootVC = [[RootViewController alloc]init]; FirstViewController * firstVC = [[FirstViewController alloc]init]; SecondViewController * secondVC = [[SecondViewController alloc]init]; //添加视图控制器 [rootVC addChildViewController:firstVC]; [rootVC addChildViewController:secondVC]; //把容器视图控制器设置为根视图 _window.rootViewController = rootVC;
容器内视图控制器的跳转
//点击按钮 跳到第二个子视图控制器 //第一个参数 执行跳转的视图控制器 //第二个参数 要跳转到的 //第三个 时间 //第五个 动画 //第六个 回调 [self.parentViewController transitionFromViewController:self toViewController:self.parentViewController.childViewControllers[1] duration:1 options:0 animations:nil completion:nil];
//跳转回第一个视图控制器 [self.parentViewController transitionFromViewController:self toViewController:self.parentViewController.childViewControllers[0] duration:1 options:0 animations:nil completion:nil];
//设置是否旋转
- (BOOL)shouldAutorotate{ return YES; }
视图控制器之间的传值
正向传值 用下一个视图控制器对象中的属性接收即可
反向传值 需要用代理传值
如视图控制器 1 2 3
1 2 3模态跳转再回跳
1——>2——>3 跳转的时候 给暴露出的属性直接传值
1<——2<——3 3制订协议 2为3的代理实现协议方法接收传来的值 2再制定协议 1遵守协议为2的代理 实现协议方法 接收传来的值。
//1跳2 SecondViewController * secondVC = [[SecondViewController alloc]init]; secondVC.str = @"我是第一个视图控制器传来的"; secondVC.delegate = self; [self presentViewController:secondVC animated:YES completion:nil]; //2跳3 ThirdViewController * thirdVC = [[ThirdViewController alloc]init]; thirdVC.str = _str; thirdVC.delegate = self; [self presentViewController:thirdVC animated:YES completion:nil]; //3回跳2 if ([_delegate respondsToSelector:@selector(receiveString:)]) { [_delegate receiveString:@"我是第三个视图控制器传来的"]; } [self dismissViewControllerAnimated:YES completion:nil]; //2回跳1 if ([_delegate respondsToSelector:@selector(receiveString:)]) { [_delegate receiveString:_backStr]; } [self dismissViewControllerAnimated:YES completion:nil];