iOS中的多个注释

时间:2014-12-12 06:07:44

标签: ios annotations mkannotation

我这里有个奇怪的问题。我不知道我将在这个注释上做什么。我得到多个注释。它应该是一个显示我的位置的注释。这是屏幕

enter image description here

这是我的代码

-(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中使用这个地图套件。

1 个答案:

答案 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