2012-01-14 71 views
4

我有一个简单的自定义无边界NSWindow子类,它有一个圆角矩形形状。在NSScrollView上裁剪圆角

在此窗口的内容视图中,我添加了NSScrollView。

如何让NSScrollView将其文档视图裁剪为NSWindow的圆角矩形形状?

我试着继承NSScrollView,覆盖drawRect:并在调用super之前添加一个剪切路径。我也尝试了用相同的技术对文档视图和剪辑视图进行子类化,但是我无法将其视为剪辑。

顺便说一句,这是在狮子与弹性滚动行为。

回答

4

多摆弄之后,我才发现,通过简单地给它一个背衬层和设置提供了层的拐角半径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]; 
+2

注意,这似乎并不为NSScrollView的包含NSTextView的工作。在这种情况下,我们需要恢复到屏蔽层方法。 – Dalmazio 2012-04-03 09:15:38

+0

另请参阅:http://stackoverflow.com/questions/5268467/how-can-i-get-nsscrollview-to-respect-a-clipping-path/9989911#9989911 – Dalmazio 2012-04-03 10:12:08

0

更妙的是IMO:但是

scrollView.wantsLayer = true 
scrollView.layer?.masksToBounds = true 
scrollView.contentView.wantsLayer = true 
scrollView.contentView.layer?.masksToBounds = true