我有一个自定义的盒子,它是NSBox的一个子类。我覆盖了drawRect:方法,并像这样绘制了一个渐变(假设我已经有了一个start & end颜色):
-(void)drawRect:(NSRect)dirtyRect {
NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:start endingColor:end];
[gradient drawInRect:dirtyRect angle:270];
[gradient release];
}现在,这个框被添加为NSCollectionView原型视图的子视图。在视图的原始状态下,它看起来像这样:

在将视图滚动到视线之外并再次返回后,它看起来如下所示:

为什么我的渐变会像那样被破坏,我该如何修复它?谢谢!
发布于 2011-06-24 12:04:45
你的问题是你是在dirtyFrame中绘图,而不是整个长方体。我不知道这是不是正确的,但是试试这个:
-(void)drawRect:(NSRect)dirtyRect {
NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:start endingColor:end];
[gradient drawInRect:[self bounds] angle:270];
[gradient release];
}发布于 2011-06-24 12:05:28
该dirtyRect参数不一定代表整个框。如果Cocoa决定只需要(重新)绘制原始帧的一个子帧,则dirtyRect仅表示该子帧。如果你已经为整个框架绘制了一个渐变,然后(重新)为一个子帧绘制了相同的渐变,它们很可能不会匹配。
尝试:
[gradient drawInRect:[self bounds] angle:270];而不是。
另一个注意:看起来你的渐变对象可以被缓存,而不是在-drawRect:中创建/释放。
https://stackoverflow.com/questions/6463166
复制相似问题