gpt4 book ai didi

ios - 将 MKMapView 上的注释与创建它们的源数组中的注释相匹配

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

我有一个名为 Proximity 的自定义对象的 NSArray。我通过创建一个新的 ProximityAnnotation 将它们添加到 map 中,如下所示:

// Add the annotations to the map
if (self.proximityItems) {
for (Proximity *proximity in self.proximityItems) {

// Create a pin
ProximityAnnotation *proximityAnnotation = [[ProximityAnnotation alloc] init];
proximityAnnotation.coordinate = CLLocationCoordinate2DMake([proximity.latitude doubleValue], [proximity.longitude doubleValue]);
proximityAnnotation.title = proximity.title;
proximityAnnotation.subtitle = NSLocalizedString(@"Drag to change location", nil);
[self.map addAnnotation:proximityAnnotation];

}//end

// Create the map rect
MapUtility *util = [[MapUtility alloc] init];
[util zoomMapViewToFitAnnotations:self.map animated:YES];
}//end

效果很好。

现在,当我拖动注释时,我想更新包含在我的 proximityItems 数组中的相应 ProximityAnnotation 对象。我正在尝试通过执行以下操作来做到这一点:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState {

// Get the coordiante
if ([annotationView.annotation isKindOfClass:[ProximityAnnotation class]] && newState == MKAnnotationViewDragStateEnding) {
ProximityAnnotation *annotation = (ProximityAnnotation *)annotationView.annotation;
CLLocationCoordinate2D coordinate = annotation.coordinate;

// Find the annotation that matches
for (Proximity *proximity in self.proximityItems) {
NSLog(@"%f == %f && %f == %f && %@ == %@", [proximity.latitude doubleValue], coordinate.latitude, [proximity.longitude doubleValue], coordinate.longitude, annotation.title, proximity.title);
if ([proximity.latitude doubleValue] == coordinate.latitude && [proximity.longitude doubleValue] == coordinate.longitude && [annotation.title isEqualToString:proximity.title]) {

// Update the proximity item
proximity.longitude = [NSNumber numberWithDouble:coordinate.longitude];
proximity.latitude = [NSNumber numberWithDouble:coordinate.latitude];

break;
}
}//end

}//end

}//end

不幸的是,即使 map 上只有 1 个注释,这似乎也没有匹配。这是从我的 NSLog 中记录的内容:

37.627946 == 37.622267 && -122.431599 == -122.435596 && Testlocation == Testlocation

奇怪的是,double 值似乎有点偏离,但我不确定为什么。

是否有更好的方法将注释与数组中的对象相匹配,以便更新原始对象?

最佳答案

坐标值很可能是“关闭”的,因为注释已被拖到新位置。

即使值相等,我也不建议比较 float 来测试对象是否相等。

相反,我建议这些选项:

  • ProximityAnnotation 类中添加对源 Proximity 对象的引用,并在创建注释时设置它(例如。proximityAnnotation.sourceProximity = proximity;)。然后要更新原始 Proximity 对象,您可以直接从注释本身获取对它的引用。
  • 消除 ProximityAnnotation 类并使 Proximity 类本身实现 MKAnnotation 协议(protocol),在这种情况下甚至可能不需要更新。

关于ios - 将 MKMapView 上的注释与创建它们的源数组中的注释相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12940768/

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