3


成功せずにタッチに応答できるカスタム注釈ビューを作成しようとしています。この質問のおかげで、注釈ビューの吹き出しをカスタマイズ
したいものに近い注釈ビューを作成できましたか? これも見ました タッチをキャプチャしてコールアウトを却下しない方法? しかし、問題はまったく異なります。これまでに行った最初のことは、MKAnnotationView をサブクラス化し、-setSelected:animated: メソッドをオーバーライドすることです。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];
  if(selected)
  {
    MyCallOut * callOut=[MyCallOut createMyCallOut];
    callOut.tag=555;
    [self.superview addSubview:callOut];

  }
  else
  {
    // [[self viewWithTag:555] removeFromSuperview];
    //Remove my custom CallOut
  }
}

問題は、マップ ビューがすべてのタッチ イベントを食べていることです。私のカスタム コールアウトには 2 つのボタンがありますが、それらを押してもアクションがトリガーされません。

私の実験の 1 つで、吹き出しビューを MKAnnotationView スーパービュー (mapView) に追加しようとしましたが、スクロール中はすべて問題ないように見えますが、ズームすると吹き出しが移動します。

4

2 に答える 2

4

マップ注釈に吹き出しアクセサリ ビューを追加する必要があります

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = nil; 
if(annotation != mapView.userLocation) 
{
    static NSString *defaultPinID = @"com.invasivecode.pin";
    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
    if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
    pinView.pinColor = MKPinAnnotationColorRed; 
    pinView.canShowCallout = YES;
    pinView.animatesDrop = YES;
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    return pinView;



} 
else {
    [mapView.userLocation setTitle:@"I am here"];
}
return pinView;
}

コールアウトのクリックイベント

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control   
{

}
于 2011-12-22T08:21:51.260 に答える
0

このリンクカスタム注釈とコールアウトを見て解決しました。他のトリッキーな部分は、偽のコールアウトでボタンを押す正しい方法を実装することです。この部分を管理して、画面上の注釈/parentAnnotation の数を理解し、いつ消えるかどうかを選択するブール値を作成しました。CalloutAnnotation を選択できるようにするだけです。

于 2012-01-03T10:23:12.920 に答える