2012-01-05 52 views
2

我想圆,并从一个的NSView派生类与下面的代码阴影:如果没有舍入,它不会没有影子,如果边缘是圆上的NSView

[graphHostView setWantsLayer:YES]; 


    graphHostView.layer.shadowRadius = 5.0; 
    graphHostView.layer.shadowOffset = NSMakeSize(10.0f, -10.0f); 
    graphHostView.layer.shadowOpacity = 0.5f; 


    graphHostView.layer.needsDisplayOnBoundsChange = YES; 
    graphHostView.layer.masksToBounds = YES;  
    graphHostView.layer.cornerRadius = 10.0; 
    [graphHostView.layer setNeedsLayout]; 

阴影只工作如果四舍五入出现第一或第二,这很重要我还可以间接地从视图与代码阴影:

NSShadow * myShadow = [[NSShadow的alloc] INIT]; [myShadow setShadowOffset:NSMakeSize(10.0f,-10.0f)]; [myShadow setShadowBlurRadius:3.0]; [graphHostView setShadow:myShadow]; [myShadow set];

具有完全同样的效果。我已经尝试了显示,setNeedsLayout和其他属性和方法的所有组合,并没有任何工作。

它令人难以置信的在我看来,这是不行的,毕竟,NSWindow呈圆形,并且阴影...

被提醒我要补充一点,我曾尝试也适用阴影背衬层上相同的结果。 由于masksToBounds会果然掩盖范围之外的任何东西,它是合理地相信阴影不能同一层上显示。 这也是明确的,即屏蔽有可能被添加到该层也过去了,屏蔽之后,因为设置阴影和口罩没有和作用,对结果的顺序上的任何影响。

所以,问题仍然是,如何实现想要的结果,而不与阴影驾驶下面的另一个的NSView这是可能的呢?

+0

是否masksToBounds防止你的影子的绘制(因为它是在边界之外?) – jrturton 2012-01-05 12:00:26

+0

感谢您的提示,我已经更新了这个问题。 :) – mbpro 2012-01-05 12:19:41

回答

-2

您需要:

[[graphHostView superview] setWantsLayer:YES]; 
1

这为我做(斯威夫特):

graphHostView.layer.masksToBounds =假