当我点击另一个注释(ann1)时,我有一种添加辅助附近注释(ann2)的方法。但是当我取消选择并重新选择完全相同的注释(ann1)时,ann2会重新创建它并再次添加。有没有办法检查地图上是否已存在注释,如果是,则不执行任何操作,否则添加新注释。我已经检查了这个:Restrict Duplicate Annotation on MapView但它没有帮助我..任何建议都表示赞赏。这就是我到目前为止所做的:
fixedLocationsPin *pin = [[fixedLocationsPin alloc] init];
pin.title = [NSString stringWithFormat:@"%@",nearestPlace];
pin.subtitle = pinSubtitle;
pin.coordinate = CLLocationCoordinate2DMake(newObject.lat, newObject.lon);
for (fixedLocationsPin *pins in mapView.annotations) {
if (MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate (pins.coordinate))) {
NSLog(@"already in map");
}else{
[mapView addAnnotation:pin];
}
在这种情况下,我已经在地图上获取了日志,但我也获得了添加到地图的注释的拖放动画。有什么想法吗?
提前谢谢..
答案 0 :(得分:3)
您的for
循环没有检查注释是否在屏幕上,它正在检查引脚的坐标当前是否在可见区域内。即使它正在检查pin
对象是否已经在mapView.annotations
中,它永远不会是真的,因为你之前刚刚创建了pin
几行,它不可能与mapView.annotations
中的对象相同。它可能具有相同的坐标和标题,这就是您需要检查的内容:
bool found = false;
for (fixedLocationsPin *existingPin in mapView.annotations)
{
if (([existingPin.title isEqualToString:pin.title] &&
(existingPin.coordinate.latitude == pin.coordinate.latitude)
(existingPin.coordinate.longitude == pin.coordinate.longitude))
{
NSLog(@"already in map");
found = true;
break;
}
}
if (!found)
{
[mapView addAnnotation:pin];
}
答案 1 :(得分:1)
注释数组,因此您只需检查
if ( yourmap.annotations.count==0)
{
NSLog(@"no annotations");
}
答案 2 :(得分:0)
NSNumber *latCord = [row valueForKey:@"latitude"];
NSNumber *longCord = [row valueForKey:@"longitude"];
NSString *title = [row valueForKey:@"name"];
CLLocationCoordinate2D coord;
coord.latitude = latCord.doubleValue;
coord.longitude = longCord.doubleValue;
MapAnnotation *annotation = [[MapAnnotation alloc]initWithCoordinate:coord withTitle:title];
if([mkMapView.annotations containsObject:annotation]==YES){
//add codes here if the map contains the annotation.
}else {
//add codes here if the annotation does not exist in the map.
}
答案 3 :(得分:0)
if (sampleMapView.annotations.count > 0) {
sampleMapView.removeAnnotation(detailMapView.annotations.last!)
}
答案 4 :(得分:-1)
在我对Craig的回答发表评论后,我认为解决方案看起来像这样:
import MapKit
extension MKMapView {
func containsAnnotation(annotation: MKAnnotation) -> Bool {
if let existingAnnotations = self.annotations as? [MKAnnotation] {
for existingAnnotation in existingAnnotations {
if existingAnnotation.title == annotation.title
&& existingAnnotation.coordinate.latitude == annotation.coordinate.latitude
&& existingAnnotation.coordinate.longitude == annotation.coordinate.longitude {
return true
}
}
}
return false
}
}
此代码允许您检查mapView是否包含给定的注释。在所有注释的“for”循环中使用它:
for annotation in annotations {
if mapView.containsAnnotation(annotation) {
// do nothing
} else {
mapView.addAnnotation(annotation)
}
PS:如果你需要添加新的注释到mapView,这种方法很有效。但是,如果您还需要删除条目,则可能必须执行相反操作:检查新注释数组中是否存在每个现有注释;如果没有,删除它。 或者您可以删除所有内容并再次添加所有内容(但随后您将更改动画...)