【发布时间】:2011-07-13 05:06:30
【问题描述】:
我正在尝试制作一个带有剪角的 NSScrollView,类似于 Twitter 应用:
我有一个NSScrollView 子类,我添加了以下代码:
- (void)drawRect:(NSRect)dirtyRect {
NSBezierPath *pcath = [NSBezierPath bezierPathWithRoundedRect:[self bounds] xRadius:kDefaultCornerRadius yRadius:kDefaultCornerRadius];
[path setClip];
[super drawRect:dirtyRect];
}
我希望NSScrollView 的内容具有圆角,但它不尊重剪切路径。我怎样才能做到这一点?
更新和澄清
我知道如何制作自定义NSScroller,我知道如何使其透明覆盖。我要问的是如何使NSSCrollView 夹角,包括它包含的所有内容。 NSScrollView 位于 NSView 内,其背景可能会发生变化,这意味着不能选择使用视图覆盖来伪造圆角。
【问题讨论】:
-
drawRect 的超实现声明有可能设置了一个新闻剪辑。尝试一个一个地绘制零件,而不是调用 super 看看是否会改变任何东西。
-
你的意思是自己绘制 contentView 和 documentView 而不是让 super 来做?看来我必须重新实现所有 NSScrollView 滚动逻辑才能做到这一点。我希望有一种无需重新发明轮子的方法。
-
查看 NSScroller 的文档。通常一个 NSScrollView 会有两个 NSScroller,一个 x 和一个 y。 NSScroller 类公开了绘图方法。如果你想要和 twitter 客户端一样的外观,无论如何你都必须继承 NSScroller。
-
您的 cmets 与问题无关。我已经实现了一个自定义滚动条并且知道如何绘制这些部分。我不知道该怎么做是通过遵守 clippedPath 来确保 documentView 得到圆角。
-
抱歉,从您的问题中不清楚您取得了多大的进步。我对此进行了一些尝试,很明显您必须将 NSClipView 或底层文档视图子类化才能使其正常工作。
标签: cocoa subclass rounded-corners nsscrollview nsbezierpath