2012-04-06 18 views
8

CAShapeLayerに、私は閉じたUIBezierPathを描画しました。私はfillColorを設定することでこの図形を塗りつぶすことができますが、図形をグラデーションで塗りつぶしたいと思います。 CAGradientLayerをベジェパスで輪郭が描かれた図形にクリップするように設定するにはどうすればよいですか?iOS上にグラデーションを含むパスを塗りつぶし

答えて

5

あなたが望むのはマスクです。

[gradientLayer setMask:shapeLayer];

19

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

... 
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); 

... 
+0

これはいいですが、あなたはまたべきCAGradientlayerはそうは次のようにあなたの形状の境界にそれをクリッピングすることができ-setMask方法を持っていますグラデーションとカラースペースを解放します。 – Sulthan

+0

おかげで、オリジナルのポストはマスクを特色にするので、私は彼らに – WhiteTiger

+0

を置くのを忘れて、私はまた、次のように追加: 'CGContextAddPath(文脈、roundedRectanglePath.CGPath); CGContextDrawLinearGradient''の前に ' ;' 'CGContextClip(文脈) – maggix

関連する問題