8

CAShapeLayerに、閉じた を描きましたUIBezierPath。を設定することでこの形状を塗りつぶすことができますがfillColor、形状をグラデーションで塗りつぶしたいと考えています。CAGradientLayerベジエ パスで輪郭を描かれた形状にクリップするように設定するにはどうすればよいですか?

4

2 に答える 2

20

ドラフトの例は次のようになります。

...
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();

UIColor *gradientColor = [UIColor colorWithRed:0.51 green:0.0 blue:0.49 alpha:1.0];

NSArray *gradientColors = [NSArray arrayWithObjects: 
                          (id)[UIColor blueColor].CGColor, 
                          (id)gradientColor.CGColor, 
                          (id)[UIColor redColor].CGColor, nil];
CGFloat gradientLocations[] = {0, 0.5, 1};
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)gradientColors, gradientLocations);

UIBezierPath *roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 200, 200) cornerRadius:6];
CGContextSaveGState(context);
[roundedRectanglePath fill];
[roundedRectanglePath addClip];
CGContextDrawLinearGradient(context, gradient, CGPointMake(10, 10), CGPointMake(210, 10), 0);
CGColorSpaceRelease(colorSpace);
CGGradientRelease(gradient);

...
于 2012-04-06T14:43:59.527 に答える
6

欲しいものはマスクです。CAGradientlayer には、次のようにシェイプの境界にクリップできる -setMask メソッドがあります。

[gradientLayer setMask:shapeLayer];

于 2012-04-06T14:33:05.527 に答える