3

次のコードを使用して、1 つの 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 セット];

全く同じ効果で。display、setNeedsLayout、およびその他のプロパティとメソッドのすべての組み合わせを試しましたが、何も機能しません。

信じられないことに、これが機能しないように思えます。結局のところ、NSWindow は丸みを帯びて影になっています...

バッキングレイヤーにも同じ結果でシャドウを適用しようとしたことを追加する必要があることを思い出してください。maskToBounds は境界の外側にあるものをマスクすることが予想されるため、同じレイヤーに影を表示することはできないと考えるのが妥当です。シャドウとマスクを設定する順序は結果に影響を与えないため、マスキングは後でこのレイヤーに追加できるものにも影響を与えることも明らかです。

それで、問題はまだ、別の NSView をシャドウで駆動せずに望ましい結果を達成する方法です。

4

2 に答える 2