'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
Q
iOS
8
A
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);
...
Bu güzel, ama aynı zamanda gerektiği degrade ve renk alanını serbest bırakın. – Sulthan
teşekkürler, orijinal yayın bir Maske özellikli yana olanağına – WhiteTiger
koymak unuttum, ayrıca ilave edilen aşağıdaki: 'CGContextAddPath (bağlam, roundedRectanglePath.CGPath) ' ' CGContextClip (içerik); ' CGContextDrawLinearGradient'' önce – maggix