iOS UINavigationController里的push和pop操作、抽屉效果原理

navigationcontroller里push和pop是这么回事?

push操作

我们每次执行下面的代码推出一个新的控制器

[self.navigationController pushViewController:vc animated:YES];

这句话的时候,系统到底干了什么?其实系统是这么做的。

//self相当于navigationController

 [self addChildViewController:vc];                 
 
 vc.view.frame =self.view.frame; 
 
 [self.view addSubview:vc.view];
 
 [vc didMoveToParentViewController:self];          
 
  1. navigationcontroller将vc1这个controller添加作为自己的子视图控制器。

  2. 设置vc这个视图控制器里根view的frame。

  3. 把vc.view添加到navigationcontroller.view上。

  4. 用didMoveToParentViewController这个方法通知已经push完毕。

pop操作

每次执行下面的代码返回到上一个控制器

[self.navigationController popViewControllerAnimated:YES]

上面的这句代码同样可以拆分成下面的3步,

[vc willMoveToParentViewController:nil];  

[vc.view removeFromSuperview];            

[vc removeFromParentViewController];


  1. 用willMoveToParentViewController这个方法,并把参数设置为nil,通知vc即将被移除父视图控制器。

  2. 把vc.view移除出父视图控制器的view。

  3. 然后用removeFromParentViewcontroller这个方法把vc彻底移除当前控制器。

iOS里面的抽屉(path)效果,就是根据这个原理实现的。

demo下载请戳这里

你可能感兴趣的:(iOS UINavigationController里的push和pop操作、抽屉效果原理)