我真的需要自定义 UIView 中的 drawRect() 吗?
Do I really need drawRect() in custom UIView?
我是 iOS 的新手,正在尝试了解自定义 UIView 中 drawRect() 的用法,所以我有一个简单的自定义视图,我从 code.I 初始化它,例如想更新它的颜色我看到如下所示的两种方法。我应该使用哪一个?为什么?
//VController
CustomView *cv = [[CustomView alloc] initWithFrame:...]
...
[cv updateColors];
//CustomView
-(id) initWithFrame {}
-(id) initWithCoder {}
-(void) updateColors(UIColor *color){ ----(1)
...Draw here with new color ...
view1.backgroundColor = color;
view2.backgroundColor = color;
}
- (void) drawRect{
... draw here with new color ... ---------(2)
view1.backgroundColor = color;
view2.backgroundColor = color;
}
如果全部您想要做的是更改此视图或其某些子视图的背景颜色,您绝对应该不要误用drawRect:
为此。 drawRect:
用于在系统认为需要刷新时绘制视图(即其内容);它会在许多不可预知的时间被调用,您不需要它 - 您只需要根据需要更改背景颜色,视图的 功能 。同样,drawRect:
是 而不是 执行子视图管理的地方。
但是,如果您要绘制视图的内容(例如,视图显示一个圆圈,您需要绘制该圆圈来描绘视图),那么您必须为此使用drawRect:
;这是视图有机会绘制自己的唯一地方。
我是 iOS 的新手,正在尝试了解自定义 UIView 中 drawRect() 的用法,所以我有一个简单的自定义视图,我从 code.I 初始化它,例如想更新它的颜色我看到如下所示的两种方法。我应该使用哪一个?为什么?
//VController
CustomView *cv = [[CustomView alloc] initWithFrame:...]
...
[cv updateColors];
//CustomView
-(id) initWithFrame {}
-(id) initWithCoder {}
-(void) updateColors(UIColor *color){ ----(1)
...Draw here with new color ...
view1.backgroundColor = color;
view2.backgroundColor = color;
}
- (void) drawRect{
... draw here with new color ... ---------(2)
view1.backgroundColor = color;
view2.backgroundColor = color;
}
如果全部您想要做的是更改此视图或其某些子视图的背景颜色,您绝对应该不要误用drawRect:
为此。 drawRect:
用于在系统认为需要刷新时绘制视图(即其内容);它会在许多不可预知的时间被调用,您不需要它 - 您只需要根据需要更改背景颜色,视图的 功能 。同样,drawRect:
是 而不是 执行子视图管理的地方。
但是,如果您要绘制视图的内容(例如,视图显示一个圆圈,您需要绘制该圆圈来描绘视图),那么您必须为此使用drawRect:
;这是视图有机会绘制自己的唯一地方。