2011-06-06 76 views
2

下面的Monotouch代碼不會導致異常,但它也不會在地圖上顯示多邊形。MKPolygon未顯示&MKPolygon查看例外

變種COORDS =新CLLocationCoordinate2D() { 新CLLocationCoordinate2D(32.67,-81.9), 新CLLocationCoordinate2D(32.77,-81.9), 新CLLocationCoordinate2D(32.61,-81.9), 新CLLocationCoordinate2D(32.43 ,-81.9), new CLLocationCoordinate2D(32.67,-81.9) };

var mkp = MKPolygon.FromCoordinates(coords);

mapView.AddOverlay(mkp);

我已經將coords [0]上的地圖居中並且工作正常,SetRegion與coords [0]一樣。使用座標[0],我沒有任何問題添加註解到MapView。

我還試圖與相同的結果(沒有錯誤,但沒有覆蓋顯示):

變種MKC = MKCircle.Circle(COORDS [0],100);

mapView.AddOverlay(mkc);

考慮到MapView可能還沒有「準備好」,我甚至嘗試了一個等待一秒的線程,然後通過InvokeOnMainThread創建了多邊形。該地圖做了動畫轉移到座標,但仍然只顯示地圖,沒有覆蓋。

如果我補充一點:

VAR MKP =新MKPolygonView(MKP);

mapView.AddOverlay(mkpv);

我得到這個異常:

「的Objective-C異常拋出名稱:NSInvalidArgumentException原因: - [MKPolygonView boundingMapRect]無法識別的選擇發送到實例0x7579100」

有可能我的座標列表有問題嗎?我試着用列表末尾的第一個座標來關閉多邊形,沒有那個,結果相同。

由於

回答

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; 

    } 
} 

然後,指定該委託對象的新實例,以您的地圖視圖的委託財產:

myMapView.Delegate = new MapDelegate(); 

每一個註釋或覆蓋您添加到地圖視圖,需要相應的視圖。

您得到的異常是因爲您正在添加一個MKOverlayView派生對象,其中MKOverlay派生是預期的。

+0

謝謝!那樣做了。快速的問題,然後......假設我想爲不同的MKPolygons填充不同的填充? - 我該如何區分他們?除了使用Title/Subtittle字段? – 2011-06-06 18:49:43

+0

另請注意,定義顏色是強制性的,默認情況下它是透明的。 – 2013-12-10 15:11:43