iOS 11 MKAnnotationView prepareForReuse 在地图视图中关闭图钉视图

iOS 11 MKAnnotationView prepareForReuse dismiss the pin view in Map view

我想做的是当我取消选择图钉时,图钉视图将其 UI 更改回未选中状态(例如更改图钉背景的颜色)

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
   //do something;

   XLMapItemAnnotation* mapItem = [self annotationForView:view];
   [view prepareForReuse];
}

通过使用此代码,当我 运行 iOS 11 中的应用程序时,如果我取消选择一个图钉,该图钉将完全消失在地图视图中。如果我删除 prepareForReuse,一切都会好起来的。 和一些代码,如果我 运行 iOS 10 中的应用程序,一切都很好,没有针消失。 sbd 可以给我提示吗,有什么问题吗?

你不应该自己调用 -prepareForReuse,它是为了让 MapKit 调用它自己。

正如@Tim Johnsen所说,-prepareForReuse是为了MKAnnotationView的重用机制,你不应该自己调用它。

在iOS11中,MapKit引入了MKAnnotationView的聚类算法(但经过一些尝试,我发现它有时会导致奇怪的行为)。在这种情况下,MKAnnotationView.isHidden 默认设置为 true。所以在你调用 -prepareForReuse 之后,MKAnnotationView 被隐藏了。

如果你想改变图钉的颜色,直接改变pinTintColor 属性,或者根据需要使用函数重置所有属性。