1

私は Obj-C 開発に不慣れで、現在単純な問題で立ち往生しています。NSView境界線と影を作成して追加しようとしています。次のコードがあります。

_view.wantsLayer = YES;
CALayer *layer = _view.layer;

layer.masksToBounds = NO;
layer.borderWidth = 2;
layer.shadowColor = [[NSColor blackColor] CGColor];
layer.shadowOffset = CGSizeMake(2, -2);
layer.shadowOpacity = 1;
layer.shadowRadius = 6;

maskToBoundsに設定したので、明らかにこれは機能するはずですがNO、これよりも優れたものは得られません。

おかしな影

見る?影は箱の外に出ることができません。私は何か見落としてますか?この件に関する多くのトピックを確認しましたが、これを解決するものは何も見つかりません...

4

1 に答える 1

2

問題は、ホスティング ビューがレイヤーをその境界にクリップすることです。

スーパービューでレイヤーバッキングを有効にすることができます:

[_view superview].wantsLayer = YES;
CALayer *layer = _view.layer;

layer.masksToBounds = NO;
layer.borderWidth = 2;
layer.shadowColor = [[NSColor blackColor] CGColor];
layer.shadowOffset = CGSizeMake(2, -2);
layer.shadowOpacity = 1;
layer.shadowRadius = 6;

スーパービューが十分に大きい場合、これは、ビュー境界の外側にあるコア アニメーション レイヤーの部分も描画する必要があります。

ここに画像の説明を入力

于 2013-06-02T07:11:39.560 に答える