我有一个 MKMapView,其中一些路线有时会在它们之间重叠,并希望将特定的路线放在视图前面。我正在尝试这个,但似乎不起作用:
[[polylineViewZoom superview] bringSubviewToFront:polylineViewZoom];
polylineViewZoom is a MKPolylineView.
提前致谢!
我有一个 MKMapView,其中一些路线有时会在它们之间重叠,并希望将特定的路线放在视图前面。我正在尝试这个,但似乎不起作用:
[[polylineViewZoom superview] bringSubviewToFront:polylineViewZoom];
polylineViewZoom is a MKPolylineView.
提前致谢!
而不是访问MKPolylineView
'ssuperview
不要直接insertOverlay:atIndex:
,而是使用类提供的方法MKMapView
。
该insertOverlay:atIndex:
方法重新定位已经方法在视图/显示层次结构中添加到地图addOverlay
(使用或)。addOverlays
通过“重新定位”,我并不是说叠加层的坐标发生了变化——只是 z-index 控制了它与其他叠加层的重叠。
您将id<MKOverlay>
对象传递给此方法(不是而MKOverlayView
or 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
类参考。
如果iOS7你可以这样做
[mapView addOverlay:polyline level:MKOverlayLevelAboveRoads];
然后,如果您希望将折线放在前面,只需将其从覆盖数组中删除并重新添加即可
[mapView addOverlay:polyline level:MKOverlayLevelAboveLabels];