我一直在玩一些苹果的示例代码 http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007318用于自定义 UITableViewCells。我遇到了一些奇怪的行为,这让我对背景颜色的工作原理完全困惑。
以下代码是自定义 UITableViewCell 中 Apple 示例自定义 UIView 的简化版本。 init 函数将背景颜色设置为紫色,然后drawRect 将背景颜色设置为绿色。我希望永远不会看到紫色,但这就是我所看到的。通过 NSLog 语句,我知道正在为每个单元格调用 init 方法,然后为每个单元格调用 drawRect 。绿色设置似乎被忽略了。如果我打电话[self setNeedsDisplay]
初始加载后的任何时候,背景都会正确设置为绿色。
- (id)initWithFrame:(CGRect)frame {
counter = 0;
if ((self = [super initWithFrame:frame])) {
self.opaque = YES;
self.backgroundColor = [UIColor purpleColor];
}
return self;
}
- (void)drawRect:(CGRect)rect {
self.backgroundColor = [UIColor greenColor];
}
谁能向我解释为什么会发生这样的事情?
Your -drawRect:
实现实际上并不进行任何绘图,因此它本身不会改变任何内容。
据推测,绘图是由与您的视图关联的图层完成的。看起来,在您的环境中,背景色图层正在您的绘制之前进行绘制。-drawRect:
方法被调用。当图层重绘时,您的-drawRect:
方法也恰好被调用。因此,在更改背景颜色后,在背景图层再次绘制之前您不会看到任何变化,您可以看出发生了这种情况,因为您的-drawRect:
再次被呼叫。
如果您希望立即应用颜色更改,则需要将视图标记为需要显示,以便它将使用更改后的背景颜色完全重绘。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)