2

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

[[polylineViewZoom superview] bringSubviewToFront:polylineViewZoom];

polylineViewZoom is a MKPolylineView.

提前致谢!

4

2 回答 2

2

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

insertOverlay:atIndex:方法重新定位已经方法在视图/显示层次结构中添加到地图addOverlay(使用或)。addOverlays通过“重新定位”,我并不是说叠加层的坐标发生了变化——只是 z-index 控制了它与其他叠加层的重叠。

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

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

为了index参数,值为 0 表示视图层次结构的“底部”,最高的叠加层index将位于“顶部”或“前面”。

因此,如果您在地图中添加了 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类参考。

于 2014-04-26T14:22:49.177 回答
0

如果iOS7你可以这样做

[mapView addOverlay:polyline level:MKOverlayLevelAboveRoads];

然后,如果您希望将折线放在前面,只需将其从覆盖数组中删除并重新添加即可

[mapView addOverlay:polyline level:MKOverlayLevelAboveLabels];
于 2014-04-25T12:38:34.697 回答