2013-04-04 201 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:'內添加子圖層肯定是錯誤的。** – 2013-04-04 08:33:32

+0

這就是說:你似乎在混合兩種不同的繪圖方法。一個是在drawRect中定製繪圖:一個是圖層。無論選擇哪種方法,您都必須在添加陰影和遮蓋白色漸變的幾個步驟中完成繪圖。你能否澄清一下你有什麼問題? – 2013-04-04 08:38:14

+0

@DavidRönnqvist,首先我很高興向我展示我的錯誤。我想在紅色圓圈上應用漸變顏色效果。看到我的第二張圖片,我想創建相同的效果。其實我不知道如何創建末端輸出米圈,但我認爲第二幅圖像上的薄白色顏色就像漸變圖層,爲什麼我選擇了這種場景。 – Tirth 2013-04-04 08:57:01

回答

0

主要問題是您要將shapeLayer添加到視圖的圖層,但實際上您只是想將其用作蒙版,所以您應該添加gradientLayer

下一個問題是CAGradientLayer不支持第二個屏幕截圖中的徑向漸變。您需要進行自定義繪圖才能達到該效果(或者只是使用圖像)。

+0

哦!第二張圖片包含徑向漸變效果?現在我想知道如何使用圖像創建漸變效果。 – Tirth 2013-04-04 09:59:35