0

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

在iOS5中,当我在mapview上点击一个Pin时,didSelectAnnotationView:会先调用delegate,然后再调用viewForAnnotation:delegate。

在 iOS6 中,当我在 mapview 上单击 Pin 时,viewForAnnotation:将首先调用,然后didSelectAnnotationView调用委托。

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

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

有人有什么想法吗?谢谢你!

4

2 回答 2

1

viewForAnnotation当 iOS 需要显示您的注释之一时,可以并且将被调用。它与何时didSelectAnnotationView调用无关。你可能认为你在 iOS 5 中找到了一个模式,但这只是你的应用程序中的侥幸,不应该依赖。如果您正确使用它,它将在 iOS 5 和 6 以及 6.1、6.2、6.anything 中工作,我猜他们也不会对 iOS 7 有太大的改变。如果您查看签名,viewForAnnotation您会发现其中一个参数是注释。那是您的应用程序尝试绘制的项目,它包含您在调用时提供的注释的任何信息[mapView addAnnotation:myAnnotation]。因此,将其转换为您的 MKAnnotation 实现并提取信息。

于 2013-05-18T08:32:47.187 回答
0

修改逻辑。

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

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

于 2013-05-18T08:02:58.303 回答