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 つしかなく、いずれもこれを引き起こしていません。
助けてくれてありがとう。