首先,我正在使用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
};
}