2012-04-06 12 views
8

पर एक ढाल के साथ पथ भरना CAShapeLayer पर, मैंने एक बंद UIBezierPath खींचा है। मैं fillColor सेट करके इस आकृति को भर सकता हूं, हालांकि मैं आकार को ढाल के साथ भरना चाहता हूं। मैं CAGradientLayer कैसे सेट अप कर सकता हूं ताकि यह बेजियर पथ द्वारा उल्लिखित आकार पर क्लिप हो?आईओएस

उत्तर

5

आप जो चाहते हैं वह मुखौटा है।

[gradientLayer setMask:shapeLayer];

19

एक ड्राफ्ट उदाहरण का पालन करना होगा:: CAGradientlayer एक -setMask विधि कि इतने की तरह अपने आकार की सीमा के लिए यह क्लिप कर सकते हैं

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

यह अच्छा है, लेकिन आप भी ऐसा करना चाहिए ढाल और रंग अंतरिक्ष जारी करें। – Sulthan

+0

धन्यवाद, मैं उन्हें – WhiteTiger

+0

डाल करने के बाद से मूल पोस्ट एक मुखौटा विशेष रुप से भूल गया, मैं यह भी कहा निम्नलिखित: 'CGContextAddPath (संदर्भ, roundedRectanglePath.CGPath);' ' CGContextClip (संदर्भ);' 'CGContextDrawLinearGradient' से पहले – maggix