2012-01-05 2 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]; 

섀도 잉은 노력하고 있습니다 반올림이 1 위 또는 2 위일 경우 중요합니다. 또한 코드를 사용하여 간접적으로 그림자를 제거 할 수 있습니다.

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이 (당신의 그림자의 드로잉을 방지합니까 = 거짓

graphHostView.layer.masksToBounds 경계 외부)? – jrturton

+0

힌트를 보내 주셔서 감사합니다. 질문을 업데이트했습니다. :) – mbpro

답변

-2

당신이 필요합니다

[[graphHostView superview] setWantsLayer:YES]; 
1

이 (스위프트)에 나를 위해 그것을했다 :