viewForAnnotation有时无法获取自定义MKAnnotation类并正确呈现它

时间:2015-03-14 12:46:13

标签: swift mkmapview mkannotation mkannotationview

我有不同的类(MKAnnotation子类)来表示地图注释 我将它们加载到地图上并且很好但是当我移动或缩放时,地图引脚开始失去它们的图像。
当我调用地图viewForAnnotation时,但BluePin类的引脚不再进入if块,因此它会从{{{{{} {{{ 1}}带默认图钉图像(绿色)。

更新

我刚刚意识到代码实际上正确地进入每个IF,但从未进入嵌套IF,所以这行代码会产生一些问题:

viewForAnnotation

这可能是什么问题:

var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("blue")
            if (annotationView == nil) { ... after zoom/pan never get here }...

1 个答案:

答案 0 :(得分:2)

dequeueReusableAnnotationViewWithIdentifier方法将返回当前未用于显示的先前创建的视图(如果有)(这是使用此方法的全部要点,以便您重新使用视图)。 / p>

当方法确实找到可以重复使用的视图时,它将返回该视图,因此结果将是非nil

缩放/平移地图时,某些注释会偏离视图,新的注释会进入视图。进入视图的那些现在可以重复使用不再可见的注释视图。因此dequeueReusableAnnotationViewWithIdentifier会返回非nil结果。

当前代码未处理dequeueReusableAnnotationViewWithIdentifier为蓝色和红色引脚返回非nil的情况,因此继续执行大{{1}之后的下一个语句} block ,即if,然后创建默认的绿色引脚视图。

需要修改代码以处理var pinView = mapView...为蓝色和红色引脚返回非dequeueReusableAnnotationViewWithIdentifier的情况:

nil