层级关系
- 在iOS中,一个iphone屏幕呈现不同的界面,我们能看到的在界面上的元素,就是UIView(H5页面除外)。首先理一下UIWindow,UIView,CALayer的关系吧。
- 一个app所有的界面展示都是在一个UIWindow中进行的,你的程序中可能拥有很多window,但是展现给用户的,只能有一个。而UIWindow也是UIView的子类。
- 每个UIWindow中都有一个root UIView,那么CALayer是什么?有人这么比喻,
UIView就像一个画板,而CALayer就是画板上的画布
- 我在做UITableViewCell的圆角效果的时候,用过UIView的CALayer属性,刷简书上一些动画的文章时,也发现这个layer跟动画有很大的关系。
- (void) layoutSubViews;
简介
- 顾名思义,这个方法是父UIView用来布局子UIView的。当你添加的约束或者自动布局不起作用时,你可以override这个方法来布局子UIView。一般重写这个方法时,会定义子UIView的Rectangle。但是这个方法不能被主动调用。当你需要重写布局时,通过setNeedsLayout,或者队列优先级更高的layoutIfNeeded方法。
哪些方法会触发系统调用这个方法呢?
- 调用setNeedsLayout、layoutIfNeeded方法
- 调用addSubView方法
- UIView的Frame发生变化时,UIView及其父UIView都会调用该方法
- ScrollView滑动时
- 旋转screen时,父UIView会调用该方法。
- view加载时,默认会调用该方法。
事件的传递链与响应链
UIView的层级关系,不仅仅影响布局方面的行为,也会影响交互事件的处理。事件的传递跟响应是两个方向相反的过程,推荐下这篇文章
史上最详细的iOS之事件的传递和响应机制