MKMapView委托调用问题

时间:2013-05-18 06:59:56

标签: ios5 ios6 mkmapview

我正面临一个关于MKMapView委托的问题。

在iOS5中,当我点击地图视图上的一个Pin时, 首先调用didSelectAnnotationView:代表, 接下来是viewForAnnotation:代表被叫。

在iOS6中,当我点击地图视图上的一个Pin时, 首先调用viewForAnnotation:,然后调用didSelectAnnotationView代理。

所以我的应用程序在iOS5中运行良好,但在iOS6中运行不佳, 这是因为我需要在didSelectAnnotationView:委托中设置坐标信息,

如果在viewForAnnotation:之前调用didSelectAnnotationView:委托,那么我将得到错误的坐标信息。

有人有点意见吗?谢谢!

2 个答案:

答案 0 :(得分:1)

当iOS需要显示您的一个注释时,

viewForAnnotation可以并且将被调用。它与调用didSelectAnnotationView时无关。你可能认为你在iOS 5中找到了一个模式,但这只是你应用中的一些东西,应该永远不会被依赖。如果你正确使用它,它将适用于iOS 5和6以及6.1,6.2,6。我猜它们也不会对iOS 7有太大的改变。如果您查看viewForAnnotation的签名,您会看到其中一个参数是注释。这是您的应用尝试绘制的项目,当您调用[mapView addAnnotation:myAnnotation]时,它会提供您给出注释的信息。因此,将其转换为MKAnnotation实现并提取信息。

答案 1 :(得分:0)

修改逻辑。

准备viewForAnnotation中的视图(理论上 - 无论如何都可以随时调用)。这是正确的地方!

“要显示指定注释的注释视图,如果要显示标准注释视图,则显示nil。”