我真的需要在自定义 UIView 中使用 drawRect() 吗?
Posted
技术标签:
【中文标题】我真的需要在自定义 UIView 中使用 drawRect() 吗?【英文标题】:Do I really need drawRect() in custom UIView? 【发布时间】:2015-06-04 02:29:14 【问题描述】:我是 ios 新手,并试图了解 drawRect() 在自定义 UIViews 中的使用,所以我有一个简单的自定义视图,我从代码初始化。我想更新它的颜色,我看到两种方法,如下所示.我应该使用哪一个?为什么?
//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;
【问题讨论】:
【参考方案1】:如果全部您想要更改此视图或其某些子视图的背景颜色,您绝对不应该不为此滥用drawRect:
。 drawRect:
用于在系统认为需要刷新时绘制视图(即其内容);它在很多且不可预测的时间被调用,而您不需要它 - 您只需要根据需要更改背景颜色,即视图的 feature。同样drawRect:
不是执行子视图管理的地方。
但如果您要绘制视图的内容(例如,视图显示一个圆圈,而您需要绘制该圆圈来描绘视图),那么您必须使用drawRect:
为此;它是唯一视图有机会绘制自己的地方。
【讨论】:
如果我有一个视图并且它的子层需要被删除并重新添加,在drawRect中可以这样做吗?我目前使用这种方式,因为我没有其他方法可以触发重新添加。 @Wingzero 绝对不是。添加和删除子视图与视图内容的绘制无关任何。 好吧,当我拿到项目的时候,有很多代码在做这样的事情,我猜是因为开发者很懒惰,所以只有调用addSubview
会处理所有任务。我想我必须停止这种错误的方式
还有一个问题,可以在drawRect里面做动画吗?如果没有,有哪些好地方?以上是关于我真的需要在自定义 UIView 中使用 drawRect() 吗?的主要内容,如果未能解决你的问题,请参考以下文章
当我无法使用 UIScrollView 时,如何在自定义 UIView 中模拟惯性滚动?
使用 Swift 在 Xcode 6 中使用 xib 在自定义 uiview 中获取 SIGABRT
如何从 cellForRowAt 调用 draw(_ rect: CGRect) 在自定义 tableview 上绘图?
在自定义 UIView 类 Iphone 上应用自动布局约束。