2013-03-14 54 views
1

我在MKMapView中繪製了一串MKPolygon。其中一些躺在彼此頂部。我如何將選定的多邊形帶到頂部/前部?將MKPolygon帶到前面

我在MKPolygonView試圖bringSubviewToFront:我從多邊形層創建:

MKPolygonView *view = (MKPolygonView *)[self.mapView viewForOverlay:polygon]; 

view.strokeColor = [UIColor orangeColor]; 

[self.mapView bringSubviewToFront:view]; 

SOLUTION:

我刪除

MKPolygonView *view = (MKPolygonView *)[self.mapView viewForOverlay:polygon]; 

view.strokeColor = [UIColor orangeColor]; 

[self.mapView bringSubviewToFront:view]; 

,取而代之的是什麼克雷格建議:

[self.mapView insertOverlay:polygon atIndex:self.mapView.overlays.count]; 

然後調用MKMapKit委託mapView:viewForOverlay:然後我處理顏色的變化有:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay { 
    if ([overlay isKindOfClass:[MKPolygon class]] && !((MKPolygon *)overlay).isSelected) { 
     MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay]; 

     aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; 
     aView.strokeColor = [UIColor yellowColor]; 
     aView.lineWidth = 3; 

     return aView; 
    } 
    else if ([overlay isKindOfClass:[MKPolygon class]] && ((MKPolygon *)overlay).isSelected) { 
     MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay]; 

     aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; 
     aView.strokeColor = [UIColor orangeColor]; 
     aView.lineWidth = 3; 

     return aView; 
    } 
} 

回答

1

當您添加一個覆蓋你可以選擇在哪裏放置在覆蓋列表中選擇一個MapView的。由於覆蓋圖只能在列表中,只要在需要的位置再次插入,就可以移動它。既然你想要它在頂部,這應該工作:

[mapView insertOverlay:overlay atIndex:[mapView.overlays count]]; 

你不應該調用viewForOverlay。把它留給iOS。如果你需要在覆蓋圖上着色,可以在viewForOverlay中進行着色,因爲iOS可以並且會在它想要的時候調用它,如果你返回一個沒有着色的覆蓋圖就是它會繪製的。

+0

恐怕這是行不通的。如果沒有這行代碼,如果我選擇頂部的多邊形,則筆觸顏色確實會改變。使用代碼時,頂部多邊形不會變爲可見(筆劃顏色不會更改,無論是將其放在哪個位置都無法顯示或筆劃顏色不起作用/擋板)。 – Padin215 2013-03-19 13:52:22

+0

更多信息:我保留一個指向「選定」多邊形的指針(即橙色邊框顏色)。當我嘗試「取消選擇」(即將其更改爲黃色)時,當我嘗試更改保存的多邊形時出現錯誤:「原因:」 - [CALayer levelsOfDetail]:無法識別的選擇器發送到實例0x91d1620'' – Padin215 2013-03-19 13:55:26

+0

I已經更新了我的答案。 – Craig 2013-03-19 17:28:56