ios – MKPolylineMKPolylineRenderer改变颜色而不删除它

ios – MKPolylineMKPolylineRenderer改变颜色而不删除它,第1张

概述我正在使用地图应用程序,我想问如何更改折线颜色而不删除并再次添加它,我在stackoverflow中找到了这个主题 https://stackoverflow.com/questions/24226290/mkpolylinerenderer-change-color-without-removing-overlay,但这不涉及我的问题,我没有触及线,所以不需要处理 – [MKMapViewDel 我正在使用地图应用程序,我想问如何更改折线颜色而不删除并再次添加它,我在stackoverflow中找到了这个主题 https://stackoverflow.com/questions/24226290/mkpolylinerenderer-change-color-without-removing-overlay,但这不涉及我的问题,我没有触及线,所以不需要处理 – [MKMapVIEwDelegate mapVIEw:dIDSelectAnnotationVIEw:]

这样做有可能吗?

编辑:我想要做的是平滑地改变折线颜色(通过着色颜色 – 像动画一样的声音)如果您对如何设置此折线的动画有任何想法,请同时告诉我.谢谢

解决方法 复杂的动画或着色/渐变可能需要创建自定义叠加渲染器类.

这些其他答案给出了关于如何绘制渐变折线的想法,动画也最需要自定义叠加渲染器:

> how to customize MKPolyLineView to draw different style lines
> Gradient Polyline with MapKit ios
> Draw CAGradient within MKPolyLineView

Apple’s Breadcrumb sample app还有一个自定义渲染器的示例,您可能会发现它很有用.

但是,如果您只想更新线条的颜色(例如从蓝色到红色),那么您可以按照以下方式执行此 *** 作:

>获取您想要更改的MKpolyline的参考.
>获取对步骤1中获得的折线的MKpolylineRenderer的引用.这可以通过调用地图视图的rendererForOverlay:instance方法(与mapVIEw:rendererForOverlay:delegate方法不同)来完成.
>更新渲染器的strokecolor.
>在渲染器上调用invalIDatePath.

不确定你想要什么,但你可以通过改变颜色并在定时步骤中逐渐调用invalIDatePath来“动画”从蓝色到红色的颜色.

另一个重要的事情是确保rendererForOverlay委托方法也使用行的“当前”颜色,以防地图视图在您直接更改渲染器的strokecolor后调用委托方法.

否则,在平移或缩放地图后,折线的颜色将变回委托方法中设置的任何颜色.

您可以将线的当前颜色保留在类级变量中,并在委托方法和要更改线的颜色的位置使用它.

类级变量(可能更好)的替代方法是使用MKpolyline的Title属性来保持其颜色,或者使用带有color属性的自定义折线覆盖类(不是渲染器).

例:

@property (nonatomic,strong) UIcolor *linecolor;//If you need to keep track of multiple overlays,//try using a NSMutableDictionary where the keys are the //overlay Titles and the value is the UIcolor.-(voID)methoDWhereYouOriginallyCreateAndAddTheOverlay{    self.linecolor = [UIcolor bluecolor];  //line starts as blue    MKpolyline *pl = [MKpolyline polylineWithCoordinates:coordinates count:count];    pl.Title = @"test";    [mapVIEw addOverlay:pl];}-(voID)methoDWhereYouWanttochangelinecolor{    self.linecolor = theNewcolor;    //Get reference to MKpolyline (example assumes you have ONE overlay)...    MKpolyline *pl = [mapVIEw.overlays objectAtIndex:0];    //Get reference to polyline's renderer...    MKpolylineRenderer *pr = (MKpolylineRenderer *)[mapVIEw rendererForOverlay:pl];    pr.strokecolor = self.linecolor;    [pr invalIDatePath];}-(MKOverlayRenderer *)mapVIEw:(MKMapVIEw *)mapVIEw rendererForOverlay:(ID<MKOverlay>)overlay{    if ([overlay isKindOfClass:[MKpolyline class]]) {        MKpolylineRenderer *pr = [[MKpolylineRenderer alloc] initWithpolyline:overlay];        pr.strokecolor = self.linecolor;        pr.linewidth = 5;        return pr;    }    return nil;}
总结

以上是内存溢出为你收集整理的ios – MKPolyline / MKPolylineRenderer改变颜色而不删除它全部内容,希望文章能够帮你解决ios – MKPolyline / MKPolylineRenderer改变颜色而不删除它所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1094971.html

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

发表评论

登录后才能评论

评论列表(0条)

保存