web-dev-qa-db-ja.com

iPhoneUITableViewCellレイヤーシャドウ

Layer.shadowColor、Offset、Radiusを使用してUITableViewCellに影を追加しようとしていますが、まったく影響がないようです。テーブルはグループ化されたスタイルです。なぜ何かアイデアはありますか?

これが私が使用しているコードです:

cell.layer.shadowColor= [UIColor blackColor].CGColor;
cell.layer.shadowRadius = 5.0;
cell.layer.shadowOffset = CGSizeMake(10, 10);
22
Zapacila

シャドウの不透明度も設定する必要があります。デフォルトは0で、明示的に設定しないと何も表示されません。

CALayerリファレンス

cell.layer.shadowOffset = CGSizeMake(1, 0);
cell.layer.shadowColor = [[UIColor blackColor] CGColor];
cell.layer.shadowRadius = 5;
cell.layer.shadowOpacity = .25;

また、シャドウパスを設定しないと、iPhone/iPadでひどいパフォーマンスが発生することに注意してください。次のコードのようなものを使用してシャドウパスを設定します。これにより、テーブルビューセルの下のレイヤーをぼかして「高品質」のシャドウを作成する必要がなくなります。

CGRect shadowFrame = cell.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
cell.layer.shadowPath = shadowPath;

ビデオ425(また424および426)を見て、ここで利用可能なWWDC 2010ビデオからの影について詳しく学んでください: WWDC 2010セッションビデオ

62
Paul Solt

Swiftに@PaulSoultの回答を追加するだけです。

cell?.layer.shadowOffset = CGSizeMake(0, 1)
cell?.layer.shadowColor = UIColor.blackColor().CGColor
cell?.layer.shadowRadius = 1
cell?.layer.shadowOpacity = 0.6

// Maybe just me, but I had to add it to work:
cell?.clipsToBounds = false

let shadowFrame: CGRect = (cell?.layer.bounds)!
let shadowPath: CGPathRef = UIBezierPath(rect: shadowFrame).CGPath
cell?.layer.shadowPath = shadowPath
19
Damasio

グループ化されたテーブルビューセルのビュー階層は、実際にはかなり不透明です。 cell.layerは、実際にはセルのメインビューのレイヤーを指し、テーブルの幅全体を占めます。挿入されているセルの丸みを帯びた部分は、実際には、グループ化されたセルを描画するためのAppleのプライベートメソッドによって処理されます。

UITableViewCellのカスタムサブクラスを作成することで、より多くの運が得られるでしょう。

2
Jerry Jones