我的问题与this相似,但是我不确定我的代码与另一篇文章中给出的答案之间的关系。
我正在MapKit
中使用Xamarin iOS
为Xamarin iOS项目创建自定义地图。我目前正在发生一些不同的自定义事情,并且正在使用添加到我的地图中的Polygons
annotations
和现在的circles
。
我刚刚开始实现向地图添加MKCircle
的操作,但是当我尝试向地图添加Circle Overlays时,出现此错误:
System.ArgumentNullException: Value cannot be null. Parameter name: polygon
我认为这是我试图将相同的叠加层返回到两个渲染器,但是我不确定如何对此进行修改。这是我的代码:
for(int i=0; i < hazards.Count; i++) //This adds 3 circles in my example
{
LatLong ltlng = JsonConvert.DeserializeObject<LatLong>(hazards[i].coordinates);
coords[i].Latitude = Convert.ToDouble(ltlng.latitude);
coords[i].Longitude = Convert.ToDouble(ltlng.longitude);
var overlay = MKCircle.Circle(coords[i], Convert.ToDouble(hazards[i].radius));
nativeMap.AddOverlay(overlay); //this is the suspected problem
}
还有我的渲染器代码:
MKOverlayRenderer GetOverlayRenderer(MKMapView mapView, IMKOverlay overlayWrapper)
{
if (!Equals(overlayWrapper, null))
{
var overlay = ObjCRuntime.Runtime.GetNSObject(overlayWrapper.Handle) as IMKOverlay;
polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon)
{
FillColor = UIColor.Red,
StrokeColor = UIColor.Blue,
Alpha = 0.4f,
LineWidth = 9
};
}
return polygonRenderer;
}
我是否需要像这样在渲染器代码中添加一些内容?:
circleRenderer = new MKCircleRenderer(overlay as MKCircle){};
最佳答案
看来您所有的叠加层都是基于MKCircle
的:
var overlay = MKCircle.Circle(coords[i]
在您的
GetOverlayRenderer
中,将所有接收为MKPolygon
对象的叠加层转换成一个空对象。polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon)
然后,您尝试为每个叠加创建一个
MKPolygonRenderer
渲染,如果您确实有一个基于MKCircle的叠加,则该渲染将不起作用。如果所有叠加层均基于
MKCircle
,则使用:new MKCircleRenderer(overlay as MKCircle){};
关于c# - Xamarin iOS-Mapkit ArgumentNullException:值不能为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46556956/