ios – 在MKPolyLineView中绘制CAGradient

ios – 在MKPolyLineView中绘制CAGradient,第1张

概述我的MKPolyLineView只有一个问题.我只是尝试为Polyline创建一个颜色渐变,但是使用CAGradient它会起作用.我将MKPolylineView子类化并重新绘制 - (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context UIC 我的MKpolylineVIEw只有一个问题.我只是尝试为polyline创建一个颜色渐变,但是使用CAGradIEnt它会起作用.我将MKpolylineVIEw子类化并重新绘制

- (voID)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context UIcolor *darker = [UIcolor blackcolor];    CGfloat baseWIDth = self.linewidth / zoomScale;    // draw the dark colour thicker    CGContextAddpath(context,self.path);    CGContextSetstrokecolorWithcolor(context,darker.CGcolor);    CGContextSetlinewidth(context,baseWIDth * 1.5);    CGContextSetlineCap(context,self.lineCap);    CGContextstrokePath(context);    // Now draw the stroke color with the regular wIDth    CGContextAddpath(context,self.strokecolor.CGcolor);    CGContextSetlinewidth(context,baseWIDth);    CGContextSetlineCap(context,self.lineCap);    CGContextstrokePath(context);    [super drawMapRect:mapRect zoomScale:zoomScale inContext:context];}

但即使这样也行不通(strokecolor =红色).任何想法如何获得渐变
折线? (高色,中心色,低色)

感谢大家.

解决方法 要使用渐变绘制MKpolyline,可以使用MKpolylineVIEw的自定义子类.由于CoreGraphics不支持使用渐变来描边,我们必须这样做

>使用CGPathCreatecopyByStrokingPath将路径转换为跟踪路径边缘的形状
>将上下文剪辑到该形状
>使用CGContextDrawlinearGradIEnt填充

这是一个让你入门的子类:

@interface TWOGradIEntpolylineVIEw : MKpolylineVIEw@end@implementation TWOGradIEntpolylineVIEw- (voID)strokePath:(CGPathref)path inContext:(CGContextRef)context{    CGfloat linewidth = CGContextConvertSizetoUserSpace(context,(CGSize){self.linewidth,self.linewidth}).wIDth;    CGPathref pathToFill = CGPathCreatecopyByStrokingPath(path,NulL,linewidth,self.lineCap,self.lineJoin,self.miterlimit);    CGRect rect = CGPathGetBoundingBox(pathToFill);    CGContextAddpath(context,pathToFill);    CGPathRelease(pathToFill);    CGContextClip(context);    CGfloat gradIEntLocations[2] = {0.0f,1.0f};    CGfloat gradIEntcolors[8] = {1.0f,0.0f,0.75f,1.0f,0.75f};    CGcolorSpaceRef colorSpace = CGcolorSpaceCreateDeviceRGB();    CGGradIEntRef gradIEnt = CGGradIEntCreateWithcolorComponents(colorSpace,gradIEntcolors,gradIEntLocations,2);    CGcolorSpaceRelease(colorSpace);    CGPoint gradIEntStart = rect.origin;    CGPoint gradIEntEnd = {CGRectGetMaxX(rect),CGRectGetMaxY(rect)};    CGContextDrawlinearGradIEnt(context,gradIEnt,gradIEntStart,gradIEntEnd,kCGGradIEntDrawsAfterEndLocation);    CGGradIEntRelease(gradIEnt);}@end

以下是使用上述类绘制的路径的屏幕截图:

总结

以上是内存溢出为你收集整理的ios – 在MKPolyLineView中绘制CAGradient全部内容,希望文章能够帮你解决ios – 在MKPolyLineView中绘制CAGradient所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1065042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存