CAGradientLayer
をCAShapeLayer
でマスキングして、テーブルの特定の行の中にあるブックマークを生成しています。CALayerのマスクされた領域の周囲に影を追加
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddLines(path,
NULL,
(CGPoint[]){
CGPointMake(8, 0),
CGPointMake(22, 0),
CGPointMake(22, 22),
CGPointMake(15, 16),
CGPointMake(8, 22)
},
5);
CGPathCloseSubpath(path);
CAShapeLayer *mask = [CAShapeLayer layer];
mask.fillColor = [UIColor redColor].CGColor;
mask.bounds = CGRectMake(0, 0, 30, 30);
mask.path = path;
mask.anchorPoint = CGPointMake(0, 0);
CGPathRelease(path);
CAGradientLayer *favoriteBadge = [CAGradientLayer layer];
favoriteBadge.colors =
@[(id)[UIColor colorWithRed:.97f green:0.5f blue:0.1f alpha:1.f].CGColor, // orange
(id)[UIColor colorWithRed:1.f green:.8f blue:0.f alpha:1.f].CGColor]; // yellow
favoriteBadge.locations = @[@0.0, @1.0];
favoriteBadge.bounds = CGRectMake(0, 0, 30, 30);
favoriteBadge.anchorPoint = CGPointMake(1, 0);
favoriteBadge.position = CGPointMake(self.bounds.size.width, 0);
favoriteBadge.mask = mask;
// FIXME: This shadow is not being applied
favoriteBadge.shadowColor = [UIColor colorWithRed:.97f green:0.5f blue:0.1f alpha:1.f].CGColor;
favoriteBadge.shadowOpacity = 1.f;
これは、あまりにもフラットに見えるので、私は形状自体の周りの影でこれをオフに終了したいです。私はレイヤーでシャドウを有効にしようとしましたが、適用されないようです。私はそれが形状の内側にない領域に適用されていると仮定します。シェイプ自体に影を追加するにはどうすればよいですか?
レイヤーをコピーして暗くし、その位置を数ピクセルだけずらすことができますが、CoreAnimationがおそらくもっと効率的にそれを行うことができるときには無駄に感じます。
+1がうまく+ idがあまりにも知っているように頼まれた:DIは、常に自分自身をイメージを移動し、ものを描きます。.. 。 –