署名: 那年高中今日还
IOS setNeedsDisplay, setNeedsLayout
UIView的setNeedsDisplay 和 setNeedsLayout方法.这两个方法都是异步执行的。
1. Display为了展示,系统为自动调用drawRect方法.
2. Layout 为了布局, 系统为自动调用 layoutSubviews方法.
关于drawRect方法:
1. 在drawRect方法中才能拿到 “ 可用的画图Context”,开始在画布上画画并且展示在 view上;
2. drawRect调用情形: (view要被展示之前)
2.1 viewDidLoad方法之后会被调用 (需要画view中所有subviews)
2.2sizeToFit 方法后被调用 (sizeToFit 为要求系统自动布局方法 , 需要重新画 subviews)
2.3contentMode属性值 被设置为Redraw模式时,比较少用
2.4 直接调用setNeedsDisplay方法时,会调用drawRect;
之所以要重载该方法,是需要在drawRect中进行画图.
DrawRect方法画图注意:
1. 如果是用UIView绘图,只能在drawRect方法中获取相应的contextRef对象并且绘图。在view的其他地方获取的contextRef对象是没有作用的;
2. 如果使用Layer画图,智能在 drawInContext:中绘制;才能拿到有用的绘图对象;
关于layoutSubviews被调用情形 (subview,frame改变时)
1. viewinit时不会被调用
2. addSubview(增加子view时)会被调用
3. 设置view frame时会被触发;
4. 滚动scrollview时会被触发
5. 旋转屏幕会触发
6. *****改变subview的大小时,会触发superView的layoutSubvuews方法;
7. ***** 调用setNeedsLayout方法时候触发