2

我正在尝试制作一个带有剪角的 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剪辑成为它的角落,包括它包含的所有内容。位于其中NSScrollViewNSView背景可能会发生变化,这意味着不能选择使用视图覆盖来伪造圆角。

4

3 回答 3

6

经过多次摆弄,我刚刚发现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];
于 2012-04-03T08:45:12.753 回答
5

您可以将蒙版应用到视图的图层:

[myScrollView setWantsLayer: YES];
[myScrollView layer].mask = ...;

面具是另一个CALayer。因此,在这种情况下,您将创建一个CALayer,将其背景颜色设置为不透明,设置其边界以匹配滚动视图,并为其指定cornerRadius一个8.0.

结果将是滚动视图及其所有内容似乎被屏蔽为圆角半径为 8px 的圆形矩形。

于 2011-03-14T18:19:56.173 回答
3

您是否尝试过覆盖

- (BOOL)isOpaque {
  return NO;
}

并将滚动视图设置-setDrawsBackground:NO并离开视图而不进行剪辑,只需绘制角,[NSColor clearColor]因为这也会清除底层颜色并模拟圆形效果。

于 2011-03-18T10:00:56.580 回答