0

イベントの詳細ビューから、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このメソッドが呼び出されるまでに、指定されたビューはすでにマップに追加されています。

したがって、どちらが最初に終了するかによって異なります。領域変更アニメーションが最後に終了し、注釈ビューが表示されている場合は機能しますが、そうでない場合は機能しません。どんな助けでもいただければ幸いです。

4

2 に答える 2

0

メソッドselectAnnotation:が2回呼び出されています。mapView:regionDidChangeAnimated:デリゲートメソッドで一度だけ呼び出してみてください。

于 2012-10-16T11:47:27.353 に答える
0

実際の[mapselectAnnotation:annotation animated:YES]で遅延のある実行セレクターを使用することになりました。これは回避策ですが、うまく機能しているようです。

于 2012-10-18T12:46:18.763 に答える