0
我怎樣才能用quartz2d繪製漸變線?Quartz2D和梯度線
我怎樣才能用quartz2d繪製漸變線?Quartz2D和梯度線
CGContextDrawLinearGradient
繪製漸變。使用CGContextClipToRect
(或相關的裁剪功能)可以裁剪到要用漸變填充的區域。
不支持使用漸變撫摸或填充路徑,而是剪切到要填充的區域。
我用這裏面drawRect:
和工作就像一個魅力:
double slope, cosy, siny;
double halfWidth = 2; // the thickness of the line will be 2*halfWith
// the start and end points have to be inside UIView frame coordinates
CGPoint start = CGPointMake(30, 20);
CGPoint end = CGPointMake(80, 90);
slope = atan2((start.y - end.y), (start.x - end.x));
cosy = cos(slope);
siny = sin(slope);
CGContextRef context = UIGraphicsGetCurrentContext();
CGGradientRef myGradient;
CGColorSpaceRef myColorspace;
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 1.0, 1.0, 1.0, 1.0, // Start color (White)
1.0, 0.0, 0.0, 1.0 }; // End color (Red)
myColorspace = CGColorSpaceCreateDeviceRGB();
myGradient = CGGradientCreateWithColorComponents (myColorspace, components, locations, num_locations);
CGContextMoveToPoint(context, start.x -halfWidth*siny , start.y +halfWidth*cosy);
CGContextAddLineToPoint(context, end.x -halfWidth*siny , end.y +halfWidth*cosy );
CGContextAddLineToPoint(context, end.x +halfWidth*siny , end.y -halfWidth*cosy);
CGContextAddLineToPoint(context, start.x +halfWidth*siny, start.y -halfWidth*cosy);
CGContextAddLineToPoint(context, start.x -halfWidth*siny , start.y +halfWidth*cosy);
CGContextClip(context);
CGContextDrawLinearGradient (context, myGradient, start, end, 0);
CGColorSpaceRelease(myColorspace);
CGGradientRelease (myGradient);