0

注釈メソッド removeAnnotation が呼び出されないため、場所の更新中にマップ上の画像が複製されます。古い場所から画像を削除できるように removeAnnotation メソッドを呼び出す方法。

<pre>
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString *AnnotationViewID = @"annotationViewID";

    MKAnnotationView *annotationView = (MKAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    if (annotationView == nil)
    {
        annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
    }

    annotationView.image = [UIImage imageNamed:@"Bike.png"];
    annotationView.annotation = annotation;

    return annotationView;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    // here do
    //UIImage *pinImage = [UIImage imageNamed:@"Bike.png"];
    CLLocation *currentLocation = newLocation;
    if(currentLocation != nil)
    {
        CLLocationCoordinate2D location = CLLocationCoordinate2DMake(currentLocation.coordinate.latitude, currentLocation.coordinate.longitude);
        MyAnnotation *annotation = [[MyAnnotation alloc] initWithCoordinates:location title:@"India" subTitle:@"Sarvopari Mall"];
        if (newLocation)
        {
            [self.myMapView removeAnnotation:annotation];
        }
        [self.myMapView addAnnotation:annotation];
    }
}
</pre>
4

3 に答える 3

0

上記のコードを見ると、新しい場所に更新するときに true になる[self.myMapView removeAnnotation:annotation];ため、おそらく呼び出されるでしょう。if (newLocation)

それ以外の場合、以下のコードでは、ご覧のとおり、まったく同じ注釈を削除および追加しています。

    if (newLocation)
    {
        [self.myMapView removeAnnotation:annotation];
    }
    [self.myMapView addAnnotation:annotation];

代わりにoldLocationで別の注釈を作成し、代わりにそれを削除する必要があると思います 。

于 2013-09-04T09:03:18.283 に答える
0
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
    {
        static NSString *AnnotationViewID = @"annotationViewID";

        MKAnnotationView *annotationView = (MKAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

        if (annotationView == nil)
        {
            annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
        }

        [self.myMapView removeAnnotation:annotation];
        annotationView.image = [UIImage imageNamed:@"Bike.png"];
        annotationView.annotation = annotation;

        return annotationView;
    }
于 2013-09-04T08:59:38.957 に答える