iPhone MapView将第一个和最后一个注释放在前面

标签 iphone mapping mkmapview mkannotation

我需要一些可以在 mk* 函数之外使用的代码。我需要运行自定义函数,将数组中的第一个和最后一个标记放在前面。 (所以在我屏幕上的所有其他标记之上)。我已经尝试过了

[self.view bringSubviewToFront:[[mapView annotations]objectAtIndex: 0]];

我在代码中使用了 [[mapView 注解]objectAtIndex: 0] 并且可以正常工作,但是当我尝试将其放在前面时它会崩溃。我是否访问了错误的层或其他什么?

感谢您的帮助。

最佳答案

你把错误的东西带到了前面。即annotations array 是符合 MKAnnotation 的对象数组协议(protocol)(因此类型为 id<MKAnnotation> ),并且它们不是 View 。

相反,您应该获取所需注释的 View ,并将它们放在前面:

id<MKAnnotation> annotation = [[mapView annotations] objectAtIndex:0];
MKAnnotationView* annotationView = [mapView viewForAnnotation:annotation];
if (annotationView != nil) {
    [annotationView.superview bringSubviewToFront:annotationView];
}

但是,您应该注意以下几点:

  1. annotationView可能是nil如果注释位于屏幕外的点上,或者注释尚未完成添加到 map 中。但是,如果是nil ,您可能不关心屏幕上没有的注释是否在前面。
  2. 您需要调用bringSubviewToFront关于annotationView的 super View ,而不是 self.view甚至mapView ,因为这些都不是 annotationView 的 super View .

关于iPhone MapView将第一个和最后一个注释放在前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3713221/

相关文章:

java - Struts 映射到以扩展名命名的操作不起作用

ios - MKMapView - 缩放以适应用户位置周围最近的注释

ios - 我是否需要为不同类型的注释创建实现 MKAnnotation 协议(protocol)的类?

iphone - 翻转时如何恢复保存的变换

iPhone 5 Web 浏览器 - 透明 .png 黑色哑光

iphone - 使动态 ImageView 可点击

java - Dozer 中泛型的深度映射

mysql - 如何将一个数据库模式映射到另一个数据库模式?

ios - 在 map View 中显示多个注释

iphone - 将地址簿数据导入 iPhone 模拟器