Xamarin.Forms.Maps 自定义多段线渲染器在视图中不渲染
Xamarin.Forms.Maps custom polyline renderer does not render when in view
我正在尝试按照 this guide 在 Xamarin.Forms 应用程序的地图上绘制多段线。它应该实时跟踪用户的位置,并在有新位置数据时更新折线。
我编写了一个自定义地图渲染器来渲染多段线,但由于某些原因,当地图处于视图中时它不会更新。我必须导航回主启动页面并再次导航到映射页面才能更新。
我提取了重现问题的最少代码,但粘贴在这里还是太多了,所以我将其托管在 GitHub:
https://github.com/Steztric/MapWithWaylineSample
请有人告诉我我做错了什么。您可以通过克隆存储库并 运行 来演示问题。
每次都需要创建渲染器,所以移除class变量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;
我正在尝试按照 this guide 在 Xamarin.Forms 应用程序的地图上绘制多段线。它应该实时跟踪用户的位置,并在有新位置数据时更新折线。
我编写了一个自定义地图渲染器来渲染多段线,但由于某些原因,当地图处于视图中时它不会更新。我必须导航回主启动页面并再次导航到映射页面才能更新。
我提取了重现问题的最少代码,但粘贴在这里还是太多了,所以我将其托管在 GitHub:
https://github.com/Steztric/MapWithWaylineSample
请有人告诉我我做错了什么。您可以通过克隆存储库并 运行 来演示问题。
每次都需要创建渲染器,所以移除class变量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;