【问题标题】:Do I really need drawRect() in custom UIView?我真的需要在自定义 UIView 中使用 drawRect() 吗?
【发布时间】: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;
 }

【问题讨论】:

    标签: ios uiview drawrect


    【解决方案1】:

    如果全部您想要更改此视图或其某些子视图的背景颜色,您绝对不应该为此滥用drawRect:drawRect: 用于在系统认为需要刷新时绘制视图(即其内容);它在很多且不可预测的时间被调用,而您不需要它 - 您只需要根据需要更改背景颜色,即视图的 feature。同样drawRect: 不是执行子视图管理的地方。

    但如果您绘制视图的内容(例如,视图显示一个圆圈,而您需要绘制该圆圈来描绘视图),那么您必须使用drawRect: 为此;它是唯一视图有机会绘制自己的地方。

    【讨论】:

    • 如果我有一个视图并且它的子层需要被删除并重新添加,在drawRect中可以这样做吗?我目前使用这种方式,因为我没有其他方法可以触发重新添加。
    • @Wingzero 绝对不是。添加和删​​除子视图与视图内容的绘制无关任何
    • 好吧,当我拿到项目的时候,有很多代码在做这样的事情,我猜是因为开发者很懒惰,所以只有调用addSubview会处理所有任务。我想我必须停止这种错误的方式
    • 还有一个问题,可以在drawRect里面做动画吗?如果没有,有哪些好地方?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多