1

1 つの問題に何時間も取り組んできましたが、まだどこに問題があるのか​​わかりません。iOS に mapView アプリケーションがあり、内部にピンがあるポリゴン (ゾーン) を表示しています。そのような注釈をクリックした後、calloutAnnotation を表示したいと思います。一度に表示できるコールアウトは 1 つだけです。つまり、別のゾーン注釈をクリックすると、現在表示されている注釈が消えて、別の注釈がポップアップする必要があります。これはかなりうまく機能していますが、別の注釈をクリックすると選択され、その直後に選択が解除され、まったく別の注釈が選択されることがあります。関連するコードは次のとおりです。

- (void)didTapMap:(NSSet *)touches {
    CGPoint touchPoint = [touches.anyObject locationInView:self.mapView];
    CLLocationCoordinate2D touchMapCoordinate = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];

    NSLog(@"Checking for annotation");

    VTParkingZoneAnnotation *tappedAnnotation = [self annotationAtCoordinate:touchMapCoordinate];
    if (tappedAnnotation) {

        NSLog(@"Annotation at coordinate: %@", tappedAnnotation.title);

        [self.mapView setCenterCoordinate:[tappedAnnotation coordinate] animated:YES];
        [self.mapView performSelector:@selector(selectAnnotation:animated:) withObject:tappedAnnotation afterDelay:0.0];
        self.selectedAnnotation = tappedAnnotation;

    } else {

        NSLog(@"No annotation at coordinate");
        self.selectedAnnotation = nil;  
        if (self.calloutAnnotation) [self.mapView removeAnnotation:self.calloutAnnotation];
        [self.delegate mapSourceDidDeselectParkingZone:self];

    }

}

これにより、吹き出しの注釈が表示されます

- (void)_showCalloutForParkingZone:(VTParkingZone *)parkingZone {
    NSLog(@"Showing callout for: %@", parkingZone.name);
    VTCalloutAnnotation *callout = [[VTCalloutAnnotation alloc] init];
    callout.parkingZone = parkingZone;
    [self.mapView addAnnotation:callout];
    self.calloutAnnotation = callout;
    [self.delegate mapSource:self didSelectParkingZone:parkingZone];
    MKCoordinateRegion rect = self.mapView.region;
    rect.center = parkingZone.center;
    [self.mapView setRegion:rect animated:YES];
}

ログアウトの出力を次に示します。

2012-08-07 15:48:32.093 Viatag[34651:11603] Checking for annotation
2012-08-07 15:48:32.093 Viatag[34651:11603] Checking annotation: Baierbrunnerstrasse Contiparkplatz
2012-08-07 15:48:32.093 Viatag[34651:11603] Checking annotation: Baierbrunnerstrasse B2Xparkplatz
2012-08-07 15:48:32.094 Viatag[34651:11603] Checking annotation: Altstadt-Lehel
2012-08-07 15:48:32.094 Viatag[34651:11603] Checking annotation: Neuhausen-Nymphenburg
2012-08-07 15:48:32.094 Viatag[34651:11603] Annotation at coordinate: Neuhausen-Nymphenburg
2012-08-07 15:48:32.096 Viatag[34651:11603] Calling _showCalloutForAnnotation: Neuhausen-Nymphenburg
2012-08-07 15:48:32.096 Viatag[34651:11603] Showing callout for: Neuhausen-Nymphenburg
2012-08-07 15:48:32.446 Viatag[34651:11603] Calling _showCalloutForAnnotation: Altstadt-Lehel
2012-08-07 15:48:32.446 Viatag[34651:11603] Showing callout for: Altstadt-Lehel

クリックされた注釈 (つまり Neuhausen-Nymphenburg) が最初に検出され、吹き出しも表示されることがわかります。しかし、突然 (理由はわかりません) _showCalloutForAnnotation が別のゾーン (Altstadt-Lehel) に対しても呼び出され、古いゾーンが消えてしまいます。

他の何かが _showCalloutForAnnotation をトリガーしているように見えますが、プロジェクト全体をチェックしたところ、そのメソッドへの明示的な呼び出しは 3 つしかなく、いずれもこれを引き起こしていません。

助けてくれてありがとう。

4

0 に答える 0