2012-01-14 73 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