我正在使用标记在iOS应用程序中显示用户位置。我现在正在使用它,但是当用户移动时,它会添加其他标记并且不会删除旧标记。我无法使用mapview清除因为它清除了我的所有标记,并且还有其他标记我不想在场景中删除。我将附上以下代码。感谢
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey];
mapIcon = @"largemapicon";
GMSMarker *myMarker;
CLLocationCoordinate2D coordi=location.coordinate;
myMarker = nil;
myMarker=[GMSMarker markerWithPosition:coordi];
// marker.snippet = coordinates[@"name"];
myMarker.map = self.mapView;
myMarker.appearAnimation = kGMSMarkerAnimationPop;
UIImage * image = [UIImage imageNamed:mapIcon];
CGSize sacleSize = CGSizeMake(45, 45);
UIGraphicsBeginImageContextWithOptions(sacleSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, sacleSize.width, sacleSize.height)];
UIImage * resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
myMarker.icon = resizedImage;
NSLog(@"movement");
}
答案 0 :(得分:1)
要删除标记,您需要在此方法之外保留对它的引用。如果用户的位置始终是相同的标记,只需在类级别定义它,然后在observeValueForKeyPath
方法的开头,执行以下操作:
myMarker.map = nil;
而不是
myMarker = nil;
请务必将变量声明(GMSMarker *myMarker;
)移出该方法。您需要它从observeValueForKeyPath
的一个呼叫持续到下一个呼叫(当用户的位置更新时)。
答案 1 :(得分:0)
为什么使用标记来显示用户的位置?只需打开用户的位置,然后使用传统的蓝点。