所以根据documentation ,我需要保留对标记的引用。现在,在我的 viewWillDisappear
方法中,我试图从 map 上清除其中一个图钉,但它不起作用。也许是因为我没有引用它?如果是这样,那是如何工作的? (顺便说一下,我无法让它作为任何其他方法的一部分工作,而不仅仅是 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;
}
}
}
}
我得到的日志输出表明它找到了正确的标记,但它并没有消失。我在导航栏上添加了一个按钮,只是为了单击并删除具有相同功能的标记,但它仍在 map 上。
最佳答案
当您调用 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; } }
关于ios - 如何在 iOS 谷歌地图中保留标记的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24343769/