我正在运行一个线程来每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秒添加和添加而不是删除,请帮忙! 谢谢!
答案 0 :(得分:5)
它是一种快速而又脏的选项,但是如果你想这样,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];
答案 1 :(得分:2)
在基于引脚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;
}
}
答案 2 :(得分:1)
你目前只存储一个标记,但你想添加N个标记 - 所以(正如saxon所说)你需要一个数组来保存所有的引脚:)
@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
答案 3 :(得分:0)
看起来你有一个循环添加多个驱动程序,每个驱动程序都分配给成员变量googleMapsDriverPin
。然后下次删除googleMapsDriverPin
- 但这只是你添加的最后一个引脚,而不是所有引脚。
为此,您需要将循环中的每个标记添加到数组中,然后在下次更新时从地图中删除所有标记。
答案 4 :(得分:0)
在Swift 2中:
为地图创建一个插座:
@IBOutlet weak var mapView: GMSMapView!
创建一个数组来存储所有标记
var markers = [GMSMarker]()
创建这样的标记:
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属性设置为您想要的任何内容,然后使用该字符串删除该标记。当执行funcName函数时,将从地图中删除userData为“from”的所有标记。让我知道您是否有任何疑问。