Xamarin.Forms.Maps自定义折线渲染器在视图中不会渲染

时间:2017-07-30 10:59:16

标签: xamarin xamarin.forms polyline custom-renderer

我正在尝试关注this guide,以便在Xamarin.Forms应用中的地图上绘制折线。它应该实时跟踪用户的位置,并在新的位置数据进入时更新折线。

我编写了一个自定义地图渲染器来渲染折线,但由于某种原因,当地图在视野中时它不会更新。我必须导航回主要的启动页面并再次导航到映射页面以便更新。

我提取了最小的代码来重现问题,但是在这里粘贴仍然太多了,所以我把它托管在GitHub上:

https://github.com/Steztric/MapWithWaylineSample

请有人让我知道我做错了什么。您可以通过克隆存储库并运行它来证明问题。

1 个答案:

答案 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;