如何在不同时间在drawRect中绘制图形对象?

时间:2012-06-26 21:18:17

标签: objective-c

对于特定的控制器类,我需要绘制一个网格(网格指的是每日计划,每天更改,有时每小时更改一次。)。一段时间后,在用户采取行动后,我需要使用我在执行原始网格时没有的更新计划数据填充该网格。

我的问题是:因为我不知道viewDidLoad当天的选定日期,这是否意味着我必须重新绘制整个网格,以及新的每日时间表数据? (这是我能想到的唯一方法来获取drawRect中的所有内容)或者我可以调用drawRect的外部方法来绘制每日时间表吗?还是有另一种更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您没有指定这是iOS还是Mac,这可能会非常轻微地影响您可以对此做出的假设。但一般来说,视图的drawRect方法至少应重绘所提供矩形内的所有内容(线索在方法名称中)。而且,从广义上讲,这是管理此类绘图的地方,当然,您可以将代码分解为其他方法以便清晰和组织。

除非您的网格非常密集,否则此重绘不太可能对性能产生明显影响。如果没有在实际肮脏的地区重新绘制所需的内容将是一个更糟糕的情况。

答案 1 :(得分:0)

在我看来,你想要从计划数据的绘图代码中分离出网格的绘图代码。

最简单的方法是为您的计划数据创建NSView的子类 - 然后您可以为每个数据片段创建该对象的实例。您的网格视图可以通过设置框架来定位这些计划数据对象,并且计划数据对象可以在自己的drawRect:方法中绘制自己。