iOS开发—drawRect的作用和调用机制
2018-09-21 本文已影响241人
雪中夜归人
一、重绘机制介绍
iOS中drawRect方法一般是用来绘制UIView类的,一般当我们对某个控件有特殊绘制需要时,需要重写该UIView类的drawRect方法用以完成绘制。
二、drawRect相关方法介绍
①、- (void)drawRect:(CGRect)rect;
重写此方法,执行重绘任务
②、- (void)setNeedsDisplay;
需要重绘,异步调用drawRect
③、- (void)setNeedsDisplayInRect:(CGRect)rect;
需要局部重绘,同样会异步调用drawRect
三、调用机制
drawRect一般调用时在Controller->loadView,Controller->viewDidLoad两个方法之后调用的。(这是系统自动的调用机制)
当需要时,还需要手动调用,当然直接调用drawRect方法是没有效果的。
需要调用setNeedsDisplay 或者 setNeedsDisplayInRect:方法去实现调用。
-
1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。
-
2、该方法在调用sizeThatFits后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
-
3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
-
4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0. 以上1,2推荐;而3,4不提倡
最后附上参考的文章,大部分摘自这篇文章。