CAGradientLayerを使用してグラデーションを追加したUITableViewCellがあります。これは正常に動作しますが、selectionStyleをUITableViewCellSelectionStyleBlueに設定した後でも、選択するとテーブルセルは青色に変わりません。グラデーションレイヤーを追加しないと、うまく動作します。UITableViewCellはピックアップしません。CAGradientLayerサブレイヤを追加するとUITableViewCellSelectionStyleBlueが表示されます。
これらのアイテムを連携させる方法はありますか?ここで
はcellForRowAtIndexPathの内側に私のコードです:
//cell gradient
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(10, 0, 300, 50);
gradient.colors = [NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1] CGColor],
(id)[[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1] CGColor],
(id)[[UIColor colorWithRed:245/255.0 green:245/255.0 blue:245/255.0 alpha:1] CGColor],
(id)[[UIColor colorWithRed:247/255.0 green:247/255.0 blue:247/255.0 alpha:1] CGColor],
nil];
gradient.locations = [NSArray arrayWithObjects:
(id)[NSNumber numberWithFloat:0.00],
(id)[NSNumber numberWithFloat:0.50],
(id)[NSNumber numberWithFloat:0.51],
(id)[NSNumber numberWithFloat:1.0],
nil];
[cell.layer insertSublayer:gradient atIndex:0];
//bring back rounded corners by creating a masklayer
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:gradient.bounds byRoundingCorners:UIRectCornerBottomRight|UIRectCornerBottomLeft cornerRadii:CGSizeMake(8, 8)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = gradient.bounds;
maskLayer.path = maskPath.CGPath;
gradient.mask = maskLayer;
//add the cell shadow
cell.layer.shadowColor = [[UIColor blackColor] CGColor];
cell.layer.shadowRadius = 3;
cell.layer.shadowOpacity = 0.5;
cell.layer.shadowOffset = CGSizeMake(0, 0);
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
これは何が起こっているかです。私はグラデーションの半分の幅をグラデーションの半分のフレームを青くしました。 touchesBeganのグラデーションを削除して削除する必要がありますか? – james
私はそうは思わない。私はUITableViewCellをサブクラス化し、initメソッドでグラデーションを設定し、次に 'setSelected:animated:'メソッドをオーバーライドし、グラデーションを選択した場合== trueにしてスーパークラスを描画させるために '[super setSelected:animated:]'青のグラデーション。 – Carter
ありがとう!私はあなたが記述したように動作させることができました。 – james