如何在iOS Google地图中保留标记的引用

时间:2014-06-21 16:49:28

标签: ios google-maps google-maps-api-3 google-maps-sdk-ios

所以根据documentation,我需要保留对标记的引用。现在,在我的viewWillDisappear方法中,我试图清除地图上的一个针脚,但它不起作用。也许是因为我没有参考它?如果是这样,那怎么办? (顺便说一句,我不能将它作为任何其他方法的一部分工作,而不仅仅是viewWillDisappear。)

我有标记的纬度和经度,这就是我现在正在做的事情:

CLLocationCoordinate2D position = CLLocationCoordinate2DMake([[passedCoordinates objectAtIndex:0]doubleValue], [[passedCoordinates objectAtIndex:1]doubleValue]);
GMSMarker *marker = [GMSMarker markerWithPosition:position];
marker.map = nil;

但它没有清除。有什么建议吗?

更新

我现在正在提供参考资料,这就是我想要找出要清除哪个标记的方法:

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:YES];
    if (passedCoordinates.count != 0) {
        for (GMSMarker *markerRef in _markerRefs){
            if (markerRef.position.latitude == [[passedCoordinates objectAtIndex:0]doubleValue] && markerRef.position.longitude == [[passedCoordinates objectAtIndex:1] doubleValue]) {
                NSLog(@"here");
                markerRef.map = nil;
            }
        }
    }
}

我得到了日志输出,它找到了正确的标记,但它不会消失。我在导航栏上添加了一个按钮,只需单击并删除具有相同功能的标记,但它仍然在地图上。

1 个答案:

答案 0 :(得分:4)

当你致电markerWithPosition:时,它会创建一个给定位置的新对象。它不会返回旧标记对象的指针与该位置。 创建标记时,应将其保存在数组中:

@interface YourClass()

// Declaring array that will hold all markers
@property (strong, nonatomic) NSMutableArray *allMarkers;

//...
@end

@implementation

//...
- (void)yourMethod
{
     if (!self.allMarkers) {
         self.allMarkers = [[NSMutableArray alloc] init];
     }

   // Here, when you creating your markers and adding to self.mapView
      CLLocationCoordinate2D position = CLLocationCoordinate2DMake([[passedCoordinates objectAtIndex:0]doubleValue], [[passedCoordinates objectAtIndex:1]doubleValue]);
GMSMarker *marker = [GMSMarker markerWithPosition:position];
      marker.map  = self.mapView;

   // add allocated markers to allMarkers array
     [self.allMarkers addObject:marker]
}

//...
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    for (GMSMarker *marker in self.allMarkers) {
        // Remove marker from the map
        marker.map = nil;
    }
}