父子控制器的重要性(2018-06-03)

控制器父子关系建立的原则

  • 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这两个控制器也应该为父子关系
[a.view addSubView: b.view];
[a addChildViewController: b];
  • 间接的添加 a的view上添加OtherView ,otherView上添加b控制器 也应该遵循父子关系原则
[a.view addSubView :OtherView];
[OtherView addSubView: b.view];
[a addChildViewController: b];
  • 如果不建立父子关系的后果会怎样?
      1. 如果出现横竖屏需求等子控制器不会接收到信息
    • 2.控制器的一些方法子控制器无响应

获得所有的子控制器

@property(nonatomic,readonly) NSArray *childViewControllers;

添加一个子控制器

//OneViewController成为了self的子控制器
//self成为了OneViewController的父控制器
[self addChildViewController:[[OneViewController alloc] init]];
// 通过addChildViewController添加的控制器都会存在于childViewControllers数组中

获得父控制器

@property(nonatomic,readonly) UIViewController *parentViewController;

将一个控制器从它的父控制器中移除

// 控制器a从它的父控制器中移除
[a removeFromParentViewController ];

// 当一个控制器从父控制器中移除时。会自动调用控制器的didMoveToParentViewController:方法,并且参数是nil
    [self.childViewControllers[0] removeFromParentViewController];

didMoveToParentViewController

- (void)willMoveToParentViewController:(UIViewController *)parent

  • 当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用
  • parent:父视图控制器,如果没有父视图控制器,将为nil

注意点:

  • 1.当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:
    [将要删除的视图控制器 willMoveToParentViewController:nil];
  • 2.当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。

过渡动画

  • 添加一个中间层的view,做动画效果避免 全屏的动画
 CATransition *animation = [CATransition animation];
    animation.type = @"cube";
    animation.subtype = index > oldIndex ? kCATransitionFromRight : kCATransitionFromLeft;
    animation.duration = 0.5;
    [self.contentView.layer addAnimation:animation forKey:nil];

autoresizingMask

  • 默认情况下,所有控制器的view的autoresingMask属性都包含了UIViewAutoresizingFlexibleWidthUIViewAutoresizingFlexibleHeight两个值
// self.view == 600x600 --> 375x667
// one.view == 100x100 --> 缩小x增大
a.view.autoresizingMask = UIViewAutoresizingNone;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容