首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSScrollView搞乱了NSGradient (损坏)

NSScrollView搞乱了NSGradient (损坏)
EN

Stack Overflow用户
提问于 2011-06-24 11:57:55
回答 2查看 201关注 0票数 2

我有一个自定义的盒子,它是NSBox的一个子类。我覆盖了drawRect:方法,并像这样绘制了一个渐变(假设我已经有了一个start & end颜色):

代码语言:javascript
复制
-(void)drawRect:(NSRect)dirtyRect {
    NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:start endingColor:end];
    [gradient drawInRect:dirtyRect angle:270];
    [gradient release];
}

现在,这个框被添加为NSCollectionView原型视图的子视图。在视图的原始状态下,它看起来像这样:

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

为什么我的渐变会像那样被破坏,我该如何修复它?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-24 12:04:45

你的问题是你是在dirtyFrame中绘图,而不是整个长方体。我不知道这是不是正确的,但是试试这个:

代码语言:javascript
复制
-(void)drawRect:(NSRect)dirtyRect {
    NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:start endingColor:end];
    [gradient drawInRect:[self bounds] angle:270];
    [gradient release];
}
票数 1
EN

Stack Overflow用户

发布于 2011-06-24 12:05:28

dirtyRect参数不一定代表整个框。如果Cocoa决定只需要(重新)绘制原始帧的一个子帧,则dirtyRect仅表示该子帧。如果你已经为整个框架绘制了一个渐变,然后(重新)为一个子帧绘制了相同的渐变,它们很可能不会匹配。

尝试:

代码语言:javascript
复制
[gradient drawInRect:[self bounds] angle:270];

而不是。

另一个注意:看起来你的渐变对象可以被缓存,而不是在-drawRect:中创建/释放。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6463166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档