我是一位经验丰富的iOS开发人员,但这确实让我感到难过。我正在同时向苹果提交问题报告。
我正在向MKMapKit地图(Xcode 4.6)添加注释。每个注释都是MyAnnotation类;MyAnnotation定义了一个属性location_id,我用它来跟踪该注释。
问题很简单:我希望location_id为-1的MyAnnotation出现在其他所有内容的前面。
为此,我在我的MKMapViewDelegate中覆盖了mapView:didAddAnnotationViews ::
-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
// Loop through any newly added views, arranging them (z-index)
for (MKAnnotationView* view in views) {
// Check the location ID
if([view.annotation isKindOfClass:[MyAnnotation class]] && [((MyAnnotation*)(view.annotation)).location_id intValue]==-1 ) {
// -1: Bring to front
[[view superview] bringSubviewToFront:view];
NSLog(@"to FRONT: %@",((MyAnnotation*)view.annotation).location_id);
} else {
// Something else: send to back
[[view superview] sendSubviewToBack:view];
NSLog(@"to BACK: %@",((MyAnnotation*)view.annotation).location_id);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很好。我有一个“添加”按钮,可将注释添加到地图中心附近的随机位置。每次我按“添加”按钮,都会出现一个新注释。但没有任何东西会隐藏location_id为-1的注释。
**直到**我滚动!
一旦开始滚动,便会重新排列所有注释(z顺序),不再适用我的仔细堆叠。
真正令人困惑的是,我之前毫无问题地完成了图标顺序堆叠。我已经创建了一个全新的单视图应用程序来测试该问题。向后或向前发送MKAnnotationView项目仅在滚动之前有效。除了上面描述的代码外,此骨架应用程序中没有其他内容。我想知道最新的MapKit框架中是否存在某种错误。
最初的问题是在用户滚动时尝试添加新的注释(mapView:regionDidChangeAnimated :)。注释添加;mapView:didAddAnnotationViews:代码触发;然后顺序在框架中被看不见的手打乱(大概是在滚动完成时)。
如果您有兴趣,这是我的viewForAnnotation:
-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { …Run Code Online (Sandbox Code Playgroud)