MKCircleRenderer未正确更新半径更改

时间:2014-03-03 09:35:35

标签: ios mkmapview mkoverlay

首先,我正在使用Xamarin.iOS,我正在尝试在MKMapView上绘制一个圆圈。这适用于以下代码

在我的控制器中我有

private MKCircleRenderer _circleRenderer;

private MKOverlayRenderer CircleOverlayRenderer(MKMapView mapView, IMKOverlay overlay)
{
    return _circleRenderer ?? (_circleRenderer = new MKCircleRenderer(overlay as MKCircle)
    {
        FillColor = UIColor.Blue,
        Alpha = 0.5f
    });
}

现在我添加了一个Slider,以便用户可以更改圆的半径

private void _radiusRadius_Changed(object sender, EventArgs e)
{
    if (_circleOverlay != null)
    {
        _mapView.RemoveOverlay(_circleOverlay);
    }

    _circleOverlay = MKCircle.Circle(_mapView.CenterCoordinate, _radiusRadius.Value);
    Console.WriteLine("Lat: {0}, Long: {1}, Radius: {2}", _mapView.CenterCoordinate.Latitude, _mapView.CenterCoordinate.Longitude, _radiusRadius.Value);
    _mapView.OverlayRenderer = CircleOverlayRenderer;
    _mapView.AddOverlay(_circleOverlay);
}

但不是圆圈变大或变小,而是从地图的左上角方向移动

(另一个小问题是绘制半径的中心不在地图的中心,尽管我使用地图的中心坐标...)

我做了我的研究并在stackoverflow上找到了这个条目

MKCircle is not updating radius but it's translating

这正是我的问题,但是这个家伙正在使用ios6版本,并在MKMapViewDelegate中覆盖了GetViewForOverlay函数(我尝试实现这种方式但失败了)并且说实话我宁愿不使用弃用的东西..

提前致谢

更新

解决方案(感谢Anna!)

    private MKOverlayRenderer CircleOverlayRenderer(MKMapView mapView, IMKOverlay overlay)
    {
        return new MKCircleRenderer(overlay as MKCircle)
        {
            FillColor = UIColor.Blue,
            Alpha = 0.5f
        };
    }

0 个答案:

没有答案