2013-02-03 14 views
8

CAGradientLayerCAShapeLayerでマスキングして、テーブルの特定の行の中にあるブックマークを生成しています。CALayerのマスクされた領域の周囲に影を追加

enter image description here

 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がおそらくもっと効率的にそれを行うことができるときには無駄に感じます。

+0

+1がうまく+ idがあまりにも知っているように頼まれた:DIは、常に自分自身をイメージを移動し、ものを描きます。.. 。 –

答えて

-2

たぶん、あなたは逃した唯一の事は

favoriteBadge.masksToBounds = NO 
関連する問題