3

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];
}

しかし、私はこのようなグラデーションカラー出力なしで得ました、 ここに画像の説明を入力

このような最終出力が欲しいのですが、 ここに画像の説明を入力

しかし、私の主な目標は CAShapeLayer にグラデーション効果を適用することです。与えられたコードのどこが間違っていますか?

4

1 に答える 1

0

主な問題はshapeLayer、ビューのレイヤーに追加していることですが、実際にはそれをマスクとして使用したいだけなので、gradientLayer代わりに追加する必要があります。

次の問題はCAGradientLayer、2 番目のスクリーンショットのような放射状グラデーションをサポートしていないことです。その効果を実現するには、カスタム描画を行う必要があります (または単に画像を使用します)。

于 2013-04-04T09:53:27.513 に答える