2013-04-04 5 views
3

Я пытаюсь применить градиентные цвета на CAShapeLayer. Для этого я пишу код,Эффект цвета градиента на CAShapeLayer

-(void)addCircle{ 
{ 
    // Drawing code 
    UIBezierPath *aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) 
                 radius:125 
                startAngle:0 
                 endAngle:DEGREES_TO_RADIANS(180) 
                 clockwise:NO]; 


    CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; 
    [shapeLayer setFrame: self.frame]; 
    [shapeLayer setPath: [aPath CGPath]]; 
    shapeLayer.lineWidth = 30.0f; 
    [shapeLayer setStrokeColor:[[UIColor redColor] CGColor]]; 
    shapeLayer.fillColor = [[UIColor clearColor] CGColor]; 
    [shapeLayer setMasksToBounds:YES]; 


    CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
    gradientLayer.startPoint = CGPointMake(0.5,1.0); 
    gradientLayer.endPoint = CGPointMake(0.5,0.0); 
    gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); 
    NSMutableArray *colors = [NSMutableArray array]; 
    for (int i = 0; i < 10; i++) { 
     [colors addObject:(id)[[UIColor colorWithHue:(0.1 * i) saturation:1 brightness:.8 alpha:1] CGColor]]; 
    } 
    gradientLayer.colors = colors; 
    [gradientLayer setMask:shapeLayer]; 

    [self.layer addSublayer:shapeLayer]; 
} 

Но я получил без градиента выхода цвета, как это, enter image description here

Я хочу, чтобы конечный результат, как это, enter image description here

Но моя главным образом цель, это применить градиент эффекты на CAShapeLayer. Где я ошибаюсь в своем коде?

+3

** Добавление подслоев внутри 'drawRect:' определенно неверно. ** –

+0

Это, как говорится, вы смешиваете два разных подхода к рисованию. Один из них - пользовательский рисунок в drawRect: и один из них - слои. Независимо от того, какой подход вы выберете, вам придется сделать рисунок в несколько шагов, добавив тени и замаскировав белый градиент. Не могли бы вы прояснить, с чем у вас проблемы? –

+0

@ DavidRönnqvist, Во-первых, я очень счастлив показать мне свою ошибку. Я хочу применить цветовые эффекты градиента к кругу красного цвета. Посмотрите мое второе изображение, я хочу создать тот же эффект. На самом деле я не знаю, как создать круг конца выходного измерительного прибора, но я предполагаю, что тонкий белый цвет на втором изображении похож на слой градиента, и поэтому я выбрал этот сценарий. – Tirth

ответ

0

Основная проблема заключается в том, что вы добавляете shapeLayer к слою представления, но на самом деле вы просто хотите использовать это как маску, поэтому вместо этого вы должны добавить gradientLayer.

Следующая проблема заключается в том, что CAGradientLayer не поддерживает радиальные градиенты, такие как один на втором снимке экрана. Чтобы достичь этого эффекта (или просто использовать изображение), вам нужно сделать собственный рисунок.

+0

Oh !!!! Второе изображение содержит эффект радиального градиента? Теперь я задаюсь вопросом, как использовать изображение для создания эффектов градиента. – Tirth

Смежные вопросы