我有不同的类(MKAnnotation子类)来表示地图注释
我将它们加载到地图上并且很好但是当我移动或缩放时,地图引脚开始失去它们的图像。
当我调用地图viewForAnnotation
时,但BluePin
类的引脚不再进入if
块,因此它会从{{{{{} {{{ 1}}带默认图钉图像(绿色)。
的更新
我刚刚意识到代码实际上正确地进入每个IF,但从未进入嵌套IF,所以这行代码会产生一些问题:
viewForAnnotation
这可能是什么问题:
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("blue")
if (annotationView == nil) { ... after zoom/pan never get here }...
答案 0 :(得分:2)
dequeueReusableAnnotationViewWithIdentifier
方法将返回当前未用于显示的先前创建的视图(如果有)(这是使用此方法的全部要点,以便您重新使用视图)。 / p>
当方法确实找到可以重复使用的视图时,它将返回该视图,因此结果将是非nil
。
缩放/平移地图时,某些注释会偏离视图,新的注释会进入视图。进入视图的那些现在可以重复使用不再可见的注释视图。因此dequeueReusableAnnotationViewWithIdentifier
会返回非nil
结果。
当前代码未处理dequeueReusableAnnotationViewWithIdentifier
为蓝色和红色引脚返回非nil
的情况,因此继续执行大{{1}之后的下一个语句} block ,即if
,然后创建默认的绿色引脚视图。
需要修改代码以处理var pinView = mapView...
为蓝色和红色引脚返回非dequeueReusableAnnotationViewWithIdentifier
的情况:
nil