2016-08-14 41 views
1

我正在嘗試向MAC應用程序上的NSImageView添加陰影。目標C - OS X - 將NSShadow添加到NSImageView中問題

我創建了一個自定義的NSImageView類 「ShadowView.h」 和修改的drawRect:像這樣:

- (void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 

    NSShadow *shadow = [[NSShadow alloc] init]; 
    [shadow setShadowBlurRadius:5]; 
    [shadow setShadowOffset:NSMakeSize(30.0, 3.0)]; 
    [shadow setShadowColor:[NSColor redColor]]; 
    [shadow set]; 

    [self setWantsLayer:YES]; 
    [self setShadow:shadow]; 
} 

但是什麼也沒有發生。另外,當我調試時,我可以看到上面的代碼被調用。我看着這個問題從5年前,但它似乎不再工作

Adding a Shadow to a NSImageView

謝謝!

+0

請問您的看法的上海華盈也已啓用層的後盾?我使用此代碼構建了一個快速測試應用程序,除非超級視圖_also_具有圖層支持,否則陰影會被截斷到視圖邊界的邊緣。也許有一個影子,但它不在你的圖像視圖中,並且超級視圖沒有圖層? – Arclite

+0

此外,這可能是一個愚蠢的問題,你有圖像視圖中的圖像? 「NSImageView」的陰影是根據圖像的alpha值計算的,所以如果沒有圖像,就沒有陰影。 – Arclite

+0

@Arclite問題是我的超級視圖沒有啓用圖層支持!我只是添加了[self.view wantsLayer:YES]到我的viewController viewDidLoad。如果你讓它成爲答案,我可以接受它是正確的。謝謝。 –

回答

1

當添加陰影的視圖,該視圖的上海華需要有層的支持功能。如果沒有,該視圖的影子被剪掉在自己的界限,如在此示例應用程序:

clipped shadow

,請務必讓你的看法的上海華-setWantsLayer:YES(或檢查「核心動畫層」爲了確保陰影複選框,在Interface Builder)是完全可見:

full shadow

0

你應該設置這些其他地方一樣,initWithFrame:方法他們離開的drawRect的:

[self setWantsLayer:YES]; 
[self setShadow:shadow];