MKPolygon没有显示& MKPolygonView异常

时间:2011-06-06 15:37:53

标签: xamarin.ios mkmapview mapkit

下面的Monotouch代码不会导致异常,但也不会在地图上显示多边形。

  

var coords = new CLLocationCoordinate2D()   {   新的CLLocationCoordinate2D(32.67,-81.9),   新的CLLocationCoordinate2D(32.77,-81.9),   新的CLLocationCoordinate2D(32.61,-81.9),   新的CLLocationCoordinate2D(32.43,-81.9),   新CLLocationCoordinate2D(32.67,-81.9)   };

     

var mkp = MKPolygon.FromCoordinates(coords);

     

mapView.AddOverlay(MKP);

我将地图集中在coords [0]上,并且工作正常,带有coords [0]的SetRegion也是如此。使用coords [0],我可以将注释添加到MapView中。

我也尝试了相同的结果(没有错误,但没有显示叠加):

  

var mkc = MKCircle.Circle(coords [0],100);

     

mapView.AddOverlay(MKC);

想到MapView可能还没有“准备好”,我甚至尝试了一个等待一秒钟的线程,然后通过InvokeOnMainThread创建了Polygon。地图做了动画移动到coord,但仍然只是显示地图而没有叠加。

如果我加上这个:

  

var mkp = new MKPolygonView(mkp);

     

mapView.AddOverlay(mkpv);

我得到了这个例外:

  

“抛出Objective-C异常。名称:NSInvalidArgumentException原因: - [MKPolygonView boundingMapRect]无法识别的选择器发送到实例0x7579100”

我的坐标列表可能有问题吗?我已尝试使用列表末尾的第一个坐标来关闭多边形,没有它,结果相同。

由于

1 个答案:

答案 0 :(得分:2)

将叠加对象添加到地图视图是不够的。您必须创建一个委托对象并实现GetViewForOverlay方法:

public class MapDelegate : MKMapViewDelegate
{

    public override MKOverlayView GetViewForOverlay (MKMapView mapView, NSObject overlay)
    {

        MKPolygon polygon = overlay as MKPolygon;
        if (null != polygon) // "overlay" is the overlay object you added
        {

            MKPolygonView polyView = new MKPolygonView(polygon);
            // customize code for the MKPolygonView
            return polyView;
        } 

        return null;

    }
}

然后,将此委托对象的新实例分配给地图视图的Delegate属性:

myMapView.Delegate = new MapDelegate();

您添加到地图视图的每个注释或叠加层都需要相应的视图。

您获得的异常是因为您要添加一个MKOverlayView派生对象,其中派生出一个MKOverlay。