0

mapView に付けた注釈がいくつかあります。これは以下のコードでうまく動作します

float userLatitude = [[userDict objectForKey:@"lat"]floatValue];
float userLongitude = [[userDict objectForKey:@"long"]floatValue];
NSString *someString = [someArray objectAtIndex:i];
NSString *anotherString = [anotherArray objectAtIndex:i];

    CLLocationCoordinate2D loopCoord = {.latitude =  userLatitude, .longitude =  userLongitude};

    MapAnnotationViewController *addAnnotation = [[MapAnnotationViewController alloc] initWithCoordinate:loopCoord];
        self.localImage = [UIImage imageNamed:@"first.png"];
        [addAnnotation setTitle:someString];
        [addAnnotation setSubTitle:anotherString];
        [mainMapView addAnnotation:addAnnotation];

基本的に、人が地図上の各注釈に触れたときに起動するカスタム タッチを追加したいと考えています。このメソッドは、マップ上の特定の場所から起動する必要があります (標準の didSelect ではありません) 各注釈からデリゲート メソッドにパラメーターをタグ付けまたは渡すにはどうすればよいですか。

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view

次のようなコードを取得するにはどうすればよいですか。

UITapGestureRecognizer *singleFingerTap = 
  [[UITapGestureRecognizer alloc] initWithTarget:self 
                                          action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleFingerTap];
[singleFingerTap release];

//The event handling method
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
  CGPoint location = [recognizer locationInView:[recognizer.view superview]];

  //Do stuff here...
}

didSelectAnnotationView特定の注釈ごとに渡されますか?

4

1 に答える 1

1

従来の方法は、MKAnnotation プロトコルを実装するクラスを作成し、そこにカスタム データを格納することだと思います。タイトル、サブタイトル、座標を標準で保存する必要があり、touchSelector を追加できます。次に、didSelect メソッドが呼び出されると、パラメータの 1 つが、注釈と呼ばれるプロパティを持つ MKAnnotationView になります。それをカスタム クラスにキャストしてから、そのセレクタ プロパティにアクセスします。

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
 {
   MyAnnotationClass *myAnno = (MyAnnotationClass *)view.annotation;
   //Do something with myAnno.touchSelector;
}

これは、独自の MKAnnotation 準拠クラスにデータを保存することに関する SO の質問です: MKAnnotation にデータを保存します か?

于 2012-08-17T22:26:40.027 に答える