我的问题类似于this但我不确定我的代码与另一篇文章中给出的答案有何关系。
我在 Xamarin iOS
中使用 MapKit
为我的 Xamarin iOS 项目创建自定义 map 。我现在有一些不同的自定义事物,正在使用 Polygons
annotations
和现在添加到我的 map 中的 circles
。
我刚刚开始将 MKCircle
添加到我的 map ,但是当我尝试将 Circle Overlays 添加到我的 map 时,我收到此错误:
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 : Value cannot be null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556956/