イベントの詳細ビューから、MapViewControllerに移動し、注釈を拡大して、そのコールアウトを開きます。関連するコードの一部を次に示します。
@interface MapViewController : UIViewController<MKMapViewDelegate>
...
- (void) viewWillAppear:(BOOL)animated
{
[self displayAnnotations];
}
- (void) viewDidAppear:(BOOL)animated
{
...
// Zoom in to event
[map setRegion:region animated:YES];
}
- (void) mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
...
regionAnimationEnded = YES;
[self selectAnnotation:a];
...
}
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
...
// check to see if the right view is in the array
...
annotationViewDidAppear = YES;
[self selectAnnotation:a];
...
}
- (void) selectAnnotation:(id<MKAnnotation>)annotation
{
if(annotationViewDidAppear && regionAnimationEnded)
{
if(!openedAnnotationFirstTime)
{
[map selectAnnotation:annotation animated:YES];
openedAnnotationFirstTime = YES;
}
}
}
これはiOS6シミュレーターで機能しますが、iOS 5.1シミュレーター(およびデバイス)では、ドキュメントに記載されているように、注釈ビューは表示されません。
(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)viewsこのメソッドが呼び出されるまでに、指定されたビューはすでにマップに追加されています。
したがって、どちらが最初に終了するかによって異なります。領域変更アニメーションが最後に終了し、注釈ビューが表示されている場合は機能しますが、そうでない場合は機能しません。どんな助けでもいただければ幸いです。