无法将MKPolylineView带到前面

时间:2014-04-25 12:26:53

标签: ios mkpolyline

我有一个MKMapView,有些路线有时会在它们之间重叠,并希望在视图前面放一个特定的路径。我试过这个,但似乎不起作用:

[[polylineViewZoom superview] bringSubviewToFront:polylineViewZoom];

polylineViewZoom is a MKPolylineView.

提前致谢!

2 个答案:

答案 0 :(得分:1)

不要直接访问MKPolylineView superview,而是使用insertOverlay:atIndex:类提供的MKMapView方法。

insertOverlay:atIndex:方法重新定位已将 添加到地图中的叠加层(使用addOverlayaddOverlays)视图/显示层次结构。通过"重新定位",我并不意味着叠加层的坐标会发生变化 - 只是它的z-index控制着与其他叠加层的重叠。

您将id<MKOverlay>对象传递给此方法( MKOverlayViewMKOverlayRenderer)。地图视图在内部负责根据需要操作视图或图层。

此方法适用于iOS 6和iOS 7。

对于index参数,值为0表示&#34;底部&#34;视图层次结构和最高index的叠加层将位于&#34;顶部&#34;或者&#34;在前面&#34;。

因此,如果您在地图中添加了5个叠加层,则index范围为0到4,并且将叠加层index设置为4会将其置于前面。

示例:

//Somewhere earlier, you add the overlay to the map view using
//addOverlay or addOverlays.

//...

//Later, when you want to bring an overlay to the front, get a reference 
//to the overlay either from the map view's overlays array
//or you might keep a reference to it in an instance variable.
id<MKOverlay> someOverlay = ...;

//calculate index for the last ("top") overlay...
NSUInteger maxIndex = self.mapView.overlays.count - 1;

[self.mapView insertOverlay:someOverlay atIndex:maxIndex];

请注意,还有一些与更改叠加层次结构相关的其他方法(例如。exchangeOverlay:withOverlay:insertOverlay:aboveOverlay:等)。有关详细信息,请参阅MKMapView类参考。

答案 1 :(得分:0)

如果iOS7你可以这样做

[mapView addOverlay:polyline level:MKOverlayLevelAboveRoads];

然后,如果您希望将折线带到前面,只需将其从覆盖阵列中移除并重新添加,如

[mapView addOverlay:polyline level:MKOverlayLevelAboveLabels];