2013-02-03 11 views
8

Ukrywam CAGradientLayer za pomocą CAShapeLayer, aby wygenerować zakładkę umieszczoną wewnątrz niektórych wierszy w mojej tabeli.Dodaj cień dookoła zamaskowanego regionu CALayera

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; 

To wygląda zbyt płaska, więc chcę, aby zakończyć ten mecz w cieniu wokół samego kształtu. Próbowałem już włączać cień na warstwie, ale nie wydaje się, że zostanie zastosowany. Zakładam, że jest on stosowany w obszarze, który nie znajduje się wewnątrz kształtu. Jak mogę dodać cień do samego kształtu?

Mogę skopiować warstwę, przyciemnić ją i zrównoważyć jej pozycję o kilka pikseli, ale to wydaje się marnotrawstwem, kiedy CoreAnimation może prawdopodobnie zrobić to bardziej wydajnie dla mnie.

+0

+1 ładnie poprosił + Id lubią wiedzieć też: DI zawsze przesunąć obraz i wyciągnąć rzeczy się .. –

Odpowiedz

-2

Może jedyną rzeczą, której brakowało

favoriteBadge.masksToBounds = NO