次のようなオーバーレイグラデーションを追加するUITableViewCellサブクラスがあります。
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// add a layer that overlays the cell adding a subtle gradient effect
_gradientLayer = [CAGradientLayer layer];
_gradientLayer.frame = self.bounds;
_gradientLayer.colors = @[(id)[[UIColor colorWithWhite:1.0f alpha:0.2f] CGColor],
(id)[[UIColor colorWithWhite:1.0f alpha:0.1f] CGColor],
(id)[[UIColor clearColor] CGColor],
(id)[[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]];
_gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f];
[self.layer insertSublayer:_gradientLayer atIndex:0];
}
return self;
}
-(void) layoutSubviews {
[super layoutSubviews];
// ensure the gradient layers occupies the full bounds
_gradientLayer.frame = self.contentView.frame;
}
問題は、グラデーションがアクセサリビューが占めるスペースをカバーしていないことです。
また、左上隅にも曲がっていないことがわかります。
勾配を取得してセルスペース全体を占めるにはどうすればよいですか?
編集 - - -
以下に提案するように、私は追加しました:
+(Class)layerClass
{
return [CAGradientLayer class];
}
セルのinitメソッドを次のように変更しました。
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
_gradientLayer = (CAGradientLayer*)self.layer;
_gradientLayer.colors = @[(id)[[UIColor colorWithWhite:1.0f alpha:0.2f] CGColor],
(id)[[UIColor colorWithWhite:1.0f alpha:0.1f] CGColor],
(id)[[UIColor clearColor] CGColor],
(id)[[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]];
_gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f];
}
return self;
}
ただし、グラデーションは次のように表示されます。
編集2---------以下のTarksの提案では、UIViewでグラデーションを使用し、セルの背景に割り当てると、この結果が得られます。