8

MKPinAnnotationViewとsetDragAbleを追加します。私のコードはここにあります

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
    [annotationView setDraggable:YES];
    annotationView.pinColor = MKPinAnnotationColorPurple;
    return [annotationView autorelease];
}

わかりました、ピンをドラッグできます。

しかし、1つの問題は、それが1回のタップだけではないということです。常に2回目のタップが必要です。

最初にピンをタップするが選択されているがドラッグできないとき。もう一度タップすると、ドラッグが利用可能になります。

どうしたの?「Map.app」のようにワンタップでドラッグしたい

4

4 に答える 4

19

この問題を再愛してください。^^

ドラッグピンの場合、ピンはすでに選択されていると思います。

そのため、初期化時にMKPinAnnotationViewを選択しました。

私の新しいコード。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
    [annotationView setDraggable:YES];
    annotationView.pinColor = MKPinAnnotationColorPurple;
    [annotationView setSelected:YES animated:YES];
    return [annotationView autorelease];
}
于 2011-02-22T02:09:39.300 に答える
4

ここでの答えは、最初にピンをタップして後で選択を解除した場合には考慮されません。その後、mapViewが注釈ビューの選択を解除するため、ドラッグの問題が再発します。私は新しい解決策に出くわしました、そしてそれはちょうど選択解除されたannotationviewを選択しています:

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
    [view setSelected:YES];
}

これはすべての欲求不満からあなたを救うでしょう。それの美しさは、これがあなたが必要とするすべてであるということです!ピンを選択したとおりに設定する必要はまったくありません。

于 2013-08-08T01:24:33.037 に答える
0

更新:いいえ、私は間違っています。私はまだ時々複数のタップを必要とします。これが私の間違った答えです:

私は今日この問題に遭遇しました。-setDragState:animated:のドキュメントに示されているように、ドラッグ状態を適切に変更していなかったことが原因のようです(-dragStateのドキュメントは無視してください。setDragState:は呼び出されません)。

これらの変更に応じて、このメソッドのカスタム実装は次のことを行う必要があります。

ドラッグ状態がMKAnnotationViewDragStateStartingに変わったら、状態をMKAnnotationViewDragStateDraggingに設定します。ドラッグの開始を示すアニメーションを実行し、アニメーション化されたパラメーターがYESの場合は、状態を変更する前にそのアニメーションを実行します。状態がMKAnnotationViewDragStateCancelingまたはMKAnnotationViewDragStateEndingのいずれかに変化した場合は、状態をMKAnnotationViewDragStateNoneに設定します。ドラッグの最後でアニメーションを実行し、アニメーション化されたパラメーターがYESの場合、状態を変更する前にそのアニメーションを実行する必要があります。

これを行う前は、ほとんどの場合、2回タップしてから押し続ける必要がありました。これを行った後、私はまだもう一度タップする必要はありません。

于 2012-08-03T03:47:43.517 に答える
-4

ピンをドラッグするには、ダブルタップではなく、タップアンドホールドする必要があります。

アプリが拒否される可能性が最も高いプライベートAPIを使用せずに、この動作を変更することはできません。

于 2011-02-22T01:28:06.337 に答える