1

これについては、SOの質問だけでなく、たくさんの考えがあるようです。ただし、特定のコードが機能すると言う人もいます。例えば:

[self.layer setShadowOffset:CGSizeMake(1, 3)];
[self.layer setShadowOpacity:0.9];
[self.layer setShadowRadius:3.0f];
[self.layer setShouldRasterize:YES];

[self.layer setCornerRadius:12.0f];

[self.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:12.0f] CGPath]];

12.0fのコーナー半径とシャドウの両方を適用する必要があります。しかし、それは機能しません。このコードを使用すると、影が表示されますが、コーナーの半径は表示されません。

私の知る限り、これはclipsToBoundsをYESに設定する必要があるためです。しかし、これは順番に影を打ち消します。

私は何か間違ったことをしていますか、それとも上記のコードは機能しませんか?

また、これを乗り越える良い方法は、別のシャドウレイヤーを作成してから追加することだと言われています。

しかし、UIViewのdrawRectでこれをどのように行うのでしょうか?-サンプルコードは素晴らしいでしょう!

ありがとう!

4

1 に答える 1

0

あなたのコードは良さそうです私はあなたのコードを試しました、そしてそれは私とうまく働きます。

rectで使用されているものが正しいことを確認して[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:12.0f] CGPath]]ください。黒い背景を使用している場合は、影が見えません。

私は自分のコードでこれを試しました。これが作業コードです......。

[self.EnterQtyView.layer setShadowOffset:CGSizeMake(1, 5)];
[self.EnterQtyView.layer setShadowOpacity:1.0];
[self.EnterQtyView.layer setShadowRadius:5.0f];
[self.EnterQtyView.layer setShouldRasterize:YES];
[self.EnterQtyView.layer setCornerRadius:12.0f];
[self.EnterQtyView.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:self.EnterQtyView.frame cornerRadius:12.0f] CGPath]];

これがお役に立てば幸いです。

于 2013-03-19T09:34:47.560 に答える