2012-01-05 5 views
2

私はラウンドと次のコードで1つの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

graphHostView.layer.masksToBoundsを=それがあるので、masksToBoundsは(あなたの影の描画を防ぐん範囲外ですか?) – jrturton

+0

ヒントありがとう、私は質問を更新しました。 :) – mbpro

答えて

-2

あなたが必要:

[[graphHostView superview] setWantsLayer:YES]; 
1

は、これは(スウィフトに)私のためにそれをやった:

関連する問題