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 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,296评论 4 61
  • 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标...
    VincentHK阅读 5,467评论 3 44
  • Troye Sivan 小天使 #马图#
    凉水煮鱼阅读 189评论 0 0
  • 等了一夜 很睏 很睏 凌晨 我用眼泪 把手机设置成静音 因为 叮叮咚 叮叮咚 眼睛的开合 很配合 短信的 步音 但...
    国胜阅读 263评论 1 1
  • 对你的思念是一天有一天 孤单的我还是没有改变。 爱你
    e236fceff1fb阅读 441评论 11 13