我这里有个奇怪的问题。我不知道我将在这个注释上做什么。我得到多个注释。它应该是一个显示我的位置的注释。这是屏幕
这是我的代码
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *identifier = @"MyLocation";
MKAnnotationView *annotationView = (MKPinAnnotationView *) [self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.image = [UIImage imageNamed:@"arrest.png"]; // since you're setting the image, you could use MKAnnotationView instead of MKPinAnnotationView
} else {
NSLog(@"hello world");
annotationView.annotation = annotation;
}
return annotationView;
}
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 350, 350);
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
MKPointAnnotation * point= [[MKPointAnnotation alloc] init];
point.coordinate = userLocation.coordinate;
point.title = @"Where am I?";
point.subtitle = @"I'm here!!!";
[self.mapView addAnnotation:point];
}
-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views{
MKAnnotationView *annotationView = [views objectAtIndex:0];
id<MKAnnotation> mp = [annotationView annotation];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate] ,350,350);
[UIView animateWithDuration:5.0 animations:^{
[self.mapView setRegion:region animated:YES];
} completion:^(BOOL finished) {
[self.mapView selectAnnotation:mp animated:YES];
}];
}
我这个项目只有简单的场景。获取位置,更改标题,然后查看当前地址。但是如果我使用这个-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
,它会被罚款,但我不能改变注释的标题。为什么我会得到多个注释?希望得到你的帮助。这是我第一次在iOS中使用这个地图套件。
答案 0 :(得分:0)
原因是每次用户位置更新代码都会添加新注释。查看方法didUpdateUserLocation:
。
在此方法中,您将创建新的MKPointAnnotation
并在每次更新位置时添加。因此,对于此方法的每次调用,您都要添加新注释,在此处需要在添加新注释之前删除旧注释。
如下面的代码:
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
// Remove all previous annotations.
[self.mapView removeAnnotations:self.mapView.annotations];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 350, 350);
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
MKPointAnnotation * point= [[MKPointAnnotation alloc] init];
point.coordinate = userLocation.coordinate;
point.title = @"Where am I?";
point.subtitle = @"I'm here!!!";
[self.mapView addAnnotation:point];
}
修改强>
如果您只想一次更新一次位置,那么最后在上面的方法中再添加一行:
[self.mapView setShowsUserLocation:NO];
此行将停止更新位置,因为它对用户位置不再感兴趣。
另请查看此answer。