con*_*are 2 cocoa subclass rounded-corners nsscrollview nsbezierpath
我正在尝试使用剪切角创建一个NSScrollView,类似于Twitter应用程序:

我有一个NSScrollView子类,我添加了以下代码:
- (void)drawRect:(NSRect)dirtyRect {
NSBezierPath *pcath = [NSBezierPath bezierPathWithRoundedRect:[self bounds] xRadius:kDefaultCornerRadius yRadius:kDefaultCornerRadius];
[path setClip];
[super drawRect:dirtyRect];
}
Run Code Online (Sandbox Code Playgroud)
我希望它的内容NSScrollView有圆角,但它不符合剪切路径.我怎样才能做到这一点?
更新和澄清
我知道如何制作自定义NSScroller,我知道如何使其透明覆盖.我要问的是如何使NSSCrollView剪辑成为角落,包括它包含的所有内容.该NSScrollView是内部的NSView,其有可能会改变,这意味着视图叠加假冒圆角的背景是不是一种选择.
经过多次摆弄之后,我发现NSScrollView可以通过简单地给它一个背衬层并设置该层的角半径来制作圆角,前提是你也可以在内部做同样的事情NSClipView.两者都是必需的,现在是有道理的,因为它是剪辑视图,它实际上将可视窗口提供到NSScrollView文档视图中.
NSScrollView * scrollView = ...;
// Give the NSScrollView a backing layer and set it's corner radius.
[scrollView setWantsLayer:YES];
[scrollView.layer setCornerRadius:10.0f];
// Give the NSScrollView's internal clip view a backing layer and set it's corner radius.
[scrollView.contentView setWantsLayer:YES];
[scrollView.contentView.layer setCornerRadius:10.0f];
Run Code Online (Sandbox Code Playgroud)
您可以将蒙版应用于视图的图层:
[myScrollView setWantsLayer: YES];
[myScrollView layer].mask = ...;
Run Code Online (Sandbox Code Playgroud)
面具是另一个CALayer。因此,在这种情况下,您将创建一个CALayer,将其背景颜色设置为不透明,设置其边界以匹配滚动视图,并为其指定一个cornerRadius,例如,8.0。
结果将是滚动视图及其所有内容似乎被屏蔽为圆角半径为 8px 的圆形。