我正面临一个关于MKMapView委托的问题。
在iOS5中,当我点击地图视图上的一个Pin时,
首先调用didSelectAnnotationView:
代表,
接下来是viewForAnnotation:
代表被叫。
在iOS6中,当我点击地图视图上的一个Pin时,
首先调用viewForAnnotation:
,然后调用didSelectAnnotationView
代理。
所以我的应用程序在iOS5中运行良好,但在iOS6中运行不佳,
这是因为我需要在didSelectAnnotationView:
委托中设置坐标信息,
如果在viewForAnnotation:
之前调用didSelectAnnotationView:
委托,那么我将得到错误的坐标信息。
有人有点意见吗?谢谢!
答案 0 :(得分:1)
viewForAnnotation
可以并且将被调用。它与调用didSelectAnnotationView
时无关。你可能认为你在iOS 5中找到了一个模式,但这只是你应用中的一些东西,应该永远不会被依赖。如果你正确使用它,它将适用于iOS 5和6以及6.1,6.2,6。我猜它们也不会对iOS 7有太大的改变。如果您查看viewForAnnotation
的签名,您会看到其中一个参数是注释。这是您的应用尝试绘制的项目,当您调用[mapView addAnnotation:myAnnotation]
时,它会提供您给出注释的信息。因此,将其转换为MKAnnotation实现并提取信息。
答案 1 :(得分:0)
修改逻辑。
准备viewForAnnotation中的视图(理论上 - 无论如何都可以随时调用)。这是正确的地方!
“要显示指定注释的注释视图,如果要显示标准注释视图,则显示nil。”