【问题标题】:multiple annotation in iOSiOS中的多个注释
【发布时间】:2014-12-12 06:07:44
【问题描述】:

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

这是我的代码

-(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&lt;MKAnnotation&gt;)annotation,它可以正常工作,但我不能更改注释的标题。为什么我得到多个注释?希望得到您的帮助。这是我第一次在 iOS 中使用这个地图工具包。

【问题讨论】:

    标签: ios annotations mkannotation


    【解决方案1】:

    原因是因为每次用户位置更新代码都会添加新的注解。看方法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

    【讨论】:

    • 这就是地图工具包的工作方式。它每秒更新一次并创建新的注释。地图套件是否有可能不会更新?
    • 如果您不想更新MapKit,请不要将代理添加到CLLocationManager。你也不再需要这个方法了。
    • 其实我没用过CLLocationManager,不过还是谢谢你的回答。
    • 你最后一次更新你的回答让我对我的项目感到宽慰。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多