Google地图标记不会移除iOS
我正在运行一个线程来每10秒获取驱动程序的位置,并希望从地图中删除添加的标记,但它不工作..
我的代码:
-(void)APiResponse:(id)returnJson { [googleMapsDriverPin setMap:nil]; googleMapsDriverPin = nil; NSMutableArray *driverPins = [[NSMutableArray alloc]init]; for (int x = 0; x < [[returnJson valueForKey:@"drivers"] count]; x++) { CLLocation *driverLocations = [[CLLocation alloc]initWithLatitude:[[[[returnJson valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_latitude"] doubleValue] longitude:[[[[detail valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_longitude"] doubleValue]]; [driverPins addObject:driverLocations]; } for (CLLocation *newLocation in driverPins) { googleMapsDriverPin = [[GMSMarker alloc] init]; [googleMapsDriverPin setPosition:newLocation.coordinate]; [googleMapsDriverPin setAnimated:YES]; [googleMapsDriverPin setTitle:@"title"]; [googleMapsDriverPin setSnippet:@"snippet"]; [googleMapsDriverPin setIcon:[GMSMarker markerImageWithColor:[UIColor blackColor]]]; [googleMapsDriverPin setMap:googleMaps]; } }
它只是不断添加和添加每10秒,而不是删除,请帮助! 谢谢!
它是一种快速和肮脏的select,但如果你想这样去GMSMarker有一个userData属性,你可以用它来标记驱动器引脚
- (void)apiResponse:(id)returnJson { for (GMSMarker *pin in self.googleMaps.markers) { if (pin.userData == @"Driver Pin"){ pin.map = nil; } } ... for (CLLocation *newLocation in driverPins) { googleMapsDriverPin = [[GMSMarker alloc] init]; ... [googleMapsDriverPin setUserData:@"Driver Pin"]; } }
更新:
[self.googleMapsView clear];
你目前只存储一个标记,但是你想添加N个标记 – 所以(如撒克逊所说)你需要一个数组来保存所有的引脚:)
@interface YouClass ... @property(nonatomic, retain) NSMutableArray *googleMapsDriverPins; @end @implementation YourClass ... -(void)APiResponse:(id)returnJson { for(GMSMarker *pin in self.googleMapsDriverPins) { pin.map = nil; } self.googleMapsDriverPins = nil; NSMutableArray *driverPins = [[NSMutableArray alloc]init]; for (int x = 0; x < [[returnJson valueForKey:@"drivers"] count]; x++) { CLLocation *driverLocations = [[CLLocation alloc]initWithLatitude:[[[[returnJson valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_latitude"] doubleValue] longitude:[[[[detail valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_longitude"] doubleValue]]; [driverPins addObject:driverLocations]; } self.googleMapsDriverPins = [NSMutableArray arrayWithCapacity:driverPins.count]; for (CLLocation *newLocation in driverPins) { GMSMarker *googleMapsDriverPin = [[GMSMarker alloc] init]; [googleMapsDriverPin setPosition:newLocation.coordinate]; [googleMapsDriverPin setAnimated:YES]; [googleMapsDriverPin setTitle:@"title"]; [googleMapsDriverPin setSnippet:@"snippet"]; [googleMapsDriverPin setIcon:[GMSMarker markerImageWithColor:[UIColor blackColor]]]; [googleMapsDriverPin setMap:googleMaps]; [self.googleMapsDriverPins addObject:googleMapsDriverPin]; } } @end
在基于引脚id你也可以删除引脚。 这里deletePinId整数是针对选定的引脚ID。
for(GMSMarker *pin in self.mapView_.markers) { NSLog(@"pin.userData : %@",pin.userData); int pinId1 = [[pin.userData valueForKey:@"pin_id"] integerValue]; if(deltePinId == pinId1 ){ pin.map = nil; }
}
它看起来像你有一个循环添加多个驱动程序,其中每个分配给成员variablesgoogleMapsDriverPin
。 然后下一次删除googleMapsDriverPin
– 但这只会是你添加的最后一个引脚,而不是所有的引脚。
为此,您需要将循环内的每个标记添加到数组中,然后在下一次更新中从地图中删除所有标记。
在Swift 2中:
为您的地图创build一个出口:
@IBOutlet weak var mapView: GMSMapView!
创build一个数组来存储所有标记
var markers = [GMSMarker]()
像这样创build标记:
func funcName() { let position = CLLocationCoordinate2DMake(lat, lon) let marker = GMSMarker(position: position) for pin: GMSMarker in self.markers { if pin.userData as! String == "from" { pin.map = nil } } marker.icon = UIImage(named: "navigation-red") marker.userData = "from" marker.map = self.mapView self.markers.append(marker) }
您可以将userData属性设置为任何您想要的,然后使用该string来删除该标记。当执行funcName函数时,将具有userData作为“from”的所有标记从地图中删除。让我知道如果您有任何疑问。