【问题标题】:Xamarin.Forms.Maps custom polyline renderer does not render when in viewXamarin.Forms.Maps 自定义折线渲染器在视图中不呈现
【发布时间】:2018-01-06 00:49:42
【问题描述】:

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

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

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

https://github.com/Steztric/MapWithWaylineSample

请有人让我知道我做错了什么。您可以通过克隆 repo 并运行它来演示问题。

【问题讨论】:

    标签: xamarin xamarin.forms polyline custom-renderer


    【解决方案1】:

    每次都需要创建渲染器,所以去掉类变量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;
    

    【讨论】:

    • 谢谢!这个问题已经困扰我好几个星期了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2023-04-08
    • 2012-03-03
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多