繁体   English   中英

Quartz2D和渐变线

[英]Quartz2D and gradient line

我如何用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM