我对 MKMapKit 的局限性感到非常沮丧。我当前的问题与注释视图的 z 顺序有关,尤其是与触摸有关的问题。如果您接受默认的 z 顺序,mapkit 会为您提供:
- 顺序看起来是随机的。z 顺序与添加注释的顺序无关。
- 如果一个注释最终位于另一个注释之上,则触摸顶部注释通常会调出底部注释的标注。似乎命中检测甚至不尊重绘制顺序。那是怎么回事?
我尝试使用类似于在网络上找到的以下代码(旨在对 z 顺序进行一些控制)来解决 #1
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { for (MKAnnotationView * 视图中的 annView) { TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView 注释]; 如果([安顶]){ [[annView superview] 带来SubviewToFront:annView]; } 别的 { [[annView 超级视图] sendSubviewToBack:annView]; } } }
遍历传递给 mapView:didAddAnnotationViews: 的注释视图并调整它们的 z 顺序似乎可以修复 #1。问题是现在标注视图不再总是在注释视图的顶部。MapKit 似乎对图层感到非常困惑(标注应该在所有注释视图上方的图层中绘制)。我什至可以弄清楚它是如何变得混乱的,因为您收到的所有 MKAnnotationViews 都具有相同的超级视图(私有类 MKOverlayView)。您会认为任何合理的设计都会绘制有关此叠加视图的标注。
有人成功解决了#1 或#2 吗?