Cocoa-Touch:实现drawRect时,如何重绘透明背景?

时间:2009-10-26 07:50:25

标签: iphone objective-c cocoa-touch

我正在实现一个UIView(更准确地说是UITableViewCell)drawRect方法。
我的视图具有透明背景,因此当视图中的某些内容发生变化时,旧的绘制版本仍然存在。因此,如果在第一个drawRect中绘制一个“A”,然后在同一个点上绘制一个“B”,我会将它们两个绘制在一起。

如何告诉框架重绘背景?
(我认为这不是因为并不总是需要,但在这种情况下它很糟糕)

我想我需要的是相当于win32的invalidateRect,但是我通过UIViews成员并没有找到任何东西。

顺便说一下,我试过setNeedsDisplay,但没有用。

5 个答案:

答案 0 :(得分:5)

我想我之前已经使用过CGContextClearRect(CGContextRef context, CGRect rect)

答案 1 :(得分:0)

你应该设置clearsContextBeforeDrawing

答案 2 :(得分:0)

我想知道,既然你自己的观点是保留了绘图,你自己是否应该抹掉传入的矩形?

如果您的背景不透明会怎样?

答案 3 :(得分:0)

有可能来自Windows世界,你正在考虑这个问题是错误的。我也来自Windows世界,我自己做了很多次。为什么需要覆盖drawRect?无论何时,只要你这样做,你就有责任照顾好一切。是否有可能以另一种方式做你想要的事情?你在drawRect中画什么?您可以将子视图或子图层添加到单元格中吗?

顺便说一句,你是否在drawRect覆盖的开头调用[super drawRect:rect]?

答案 4 :(得分:-2)

我不再重复使用细胞了。

这对我有用,因为我总是有<我桌子上有20个牢房。我想这不是每个人的解决方案,但这是我计划去的方式。

我没有让框架创建和重用10个单元格,而是在为它们获取数据时创建我的20,然后在显示时间,事情变得更顺畅,因为它们不需要每次都重新定制。 / p>