iOS

2012-04-06 24 views
8

'de bir degrade ile bir yolu doldurma CAShapeLayer'da kapalı bir UIBezierPath çizdim. Bu şekli fillColor ayarlayarak doldurabilirim, ancak şekli bir degrade ile doldurmak istiyorum. CAGradientLayer'u nasıl kurabilirim, böylece bezier yolu tarafından özetlenen şekle kliplenir?iOS

cevap

5

İstediğiniz maske.

[gradientLayer setMask:shapeLayer];

19

taslak örneği, aşağıdaki olurdu: CAGradientlayer şöyle Şeklinizin sınırları onu klibi bir -setMask yöntemi vardır

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

Bu güzel, ama aynı zamanda gerektiği degrade ve renk alanını serbest bırakın. – Sulthan

+0

teşekkürler, orijinal yayın bir Maske özellikli yana olanağına – WhiteTiger

+0

koymak unuttum, ayrıca ilave edilen aşağıdaki: 'CGContextAddPath (bağlam, roundedRectanglePath.CGPath) ' ' CGContextClip (içerik); ' CGContextDrawLinearGradient'' önce – maggix