我正在尝试关注this guide,以便在Xamarin.Forms应用中的地图上绘制折线。它应该实时跟踪用户的位置,并在新的位置数据进入时更新折线。
我编写了一个自定义地图渲染器来渲染折线,但由于某种原因,当地图在视野中时它不会更新。我必须导航回主要的启动页面并再次导航到映射页面以便更新。
我提取了最小的代码来重现问题,但是在这里粘贴仍然太多了,所以我把它托管在GitHub上:
https://github.com/Steztric/MapWithWaylineSample
请有人让我知道我做错了什么。您可以通过克隆存储库并运行它来证明问题。
答案 0 :(得分:2)
您需要每次都创建渲染器,因此请删除类变量polylineRenderer并使用本地渲染器。
MKOverlayRenderer GetOverlayRenderer(MKMapView mapView, IMKOverlay overlayWrapper)
{
IMKOverlay overlay = Runtime.GetNSObject(overlayWrapper.Handle) as IMKOverlay;
if (overlay is MKPolyline)
{
var polylineRenderer = new MKPolylineRenderer(overlay as MKPolyline);
polylineRenderer.FillColor = UIColor.Blue;
polylineRenderer.StrokeColor = UIColor.Red;
polylineRenderer.LineWidth = 3;
polylineRenderer.Alpha = 0.4f;
return polylineRenderer;
}
else
{
return null;
}
}
你也可以简化一些事情
定义MKPolyline currentWayline;
然后
var wayline = MKPolyline.FromCoordinates(coords.ToArray());
//IMKOverlay overlay = Runtime.GetNSObject(wayline.Handle) as IMKOverlay;
nativeMap.AddOverlay(wayline);
currentWayline = wayline;