gpt4 book ai didi

ios - 在 setRegion 上取消选择 MKAnnotationView

转载 作者:行者123 更新时间:2023-11-29 00:46:11 24 4
gpt4 key购买 nike

当使用以下代码使用 MapkKit 单击 MKAnnotationView 时,我试图在图钉上显着放大:

MKCoordinateRegion mapRegion;
mapRegion.center = view.annotation.coordinate;;
mapRegion.span.latitudeDelta = 0.2;
mapRegion.span.longitudeDelta = 0.2;

[MKMapView animateWithDuration:0.15 animations:^{
[mapView setRegion:mapRegion animated: YES];
}];

但是,无论何时放大,我都希望图钉保持选中状态。有没有办法防止 MKAnnotatiotionView 被取消选择和函数 didDeselectAnnotationView 被调用。

我认为它可能发生的原因是因为缩放上的 mapView 正在更新注释。如果这是原因,有没有办法防止这种情况发生?

最佳答案

是的,如果 [mapView setRegion: ...] 导致 mapView 上的注释因任何原因发生更改,那么您选择的注释将被取消选择(因为它是即将被删除!)。

解决此问题的一种方法是对注释进行“差异”替换。例如,目前您可能有一些如下所示的代码(用 Swift 表示):

func displayNewMapPins(pinModels: [MyCustomPinModel]) {
self.mapView.removeAnnotations(self.mapView.annotations) //remove all of the currently displayed annotations

let newAnnotations = annotationModels.map { $0.toAnnotation } //convert 'MyCustomPinModel' to an 'MKAnnotation'
self.mapView.addAnnotations(newAnnotations) //put the new annotations on the map
}

您想将其更改为更像这样:

func displayNewMapPins(pinModels: [MyCustomPinModel]) {
let oldAnnotations = self.mapView.annotations
let newAnnotations = annotationModels.map { $0.toAnnotation }

let annotationsToRemove = SomeOtherThing.thingsContainedIn(oldAnnotations, butNotIn: newAnnotations)
let annotationsToAdd = SomeOtherThing.thingsContainedIn(newAnnotations, butNotIn: oldAnnotations)

self.mapView.removeAnnotations(annotationsToRemove)
self.mapView.addAnnotations(annotationsToAdd)
}

SomeOtherThing.thingsContainedIn(:butNotIn:) 的具体实现取决于您的要求,但这是您想要的通用代码结构。

这样做的另一个好处是提高应用程序的性能 - 在 MKMapView 中添加和删除注释可能非常昂贵!

关于ios - 在 setRegion 上取消选择 MKAnnotationView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38579691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com