2012-04-06 27 views
8

Trên CAShapeLayer, tôi đã rút ra một đóng UIBezierPath. Tôi có thể điền vào hình dạng này bằng cách thiết lập các fillColor, tuy nhiên tôi muốn điền vào hình dạng với một gradient. Làm thế nào tôi có thể thiết lập các CAGradientLayer vì vậy nó clip vào hình dạng vạch ra bởi con đường bezier?Điền đường dẫn có độ dốc trên iOS

Trả lời

5

Điều bạn muốn là mặt nạ. CAGradientlayer có một phương pháp có thể -setMask clip nó vào giới hạn của hình dạng của bạn như sau:

[gradientLayer setMask:shapeLayer];

19

Một dự thảo ví dụ sẽ là như sau:

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

này là tốt đẹp, nhưng bạn cũng nên giải phóng gradient và không gian màu. – Sulthan

+0

cảm ơn, tôi quên đặt chúng – WhiteTiger

+0

kể từ khi bài gốc đặc trưng một Mask, tôi cũng bổ sung như sau: 'CGContextAddPath (bối cảnh, roundedRectanglePath.CGPath); ' ' CGContextClip (context);' trước khi 'CGContextDrawLinearGradient' – maggix

Các vấn đề liên quan