1

MKAnnotationView のカスタム サブクラスで UILongPressGestureRecognizer に問題があります。コールバックは断続的にのみ発生します。minimumPressDuration を短くすると、より頻繁に起動します。minimumPressDuration 値が 0.1 の場合、毎回起動します。値が 0.4 の場合、指を離してもまったく発火しません。0.2 では、ヒットまたはミスします。

(以下のように) タップ ジェスチャを使用すると、問題なく動作します。他のビューで LongPress ジェスチャを使用していますが、正常に動作します。私がこの問題を抱えているのは MKAnnotationView だけなので、AnnotationViews の他の内部イベント コールバックのいくつかが干渉している (コールアウトなど) かどうか疑問に思っています。

この問題は、iOS4 (sim と電話) と 3.2 (sim、デバイスを持っていない) で見られます。

ジェスチャ認識エンジンを作成する方法は次のとおりです。

#define USE_LONG_PRESS 1
#define USE_TAP 0
#if USE_LONG_PRESS
    UILongPressGestureRecognizer *longPressGR = 
    [[UILongPressGestureRecognizer alloc] initWithTarget:self 
                                                action:@selector(handleLongPress:)];
    longPressGR.minimumPressDuration = 0.2;
    [self addGestureRecognizer:longPressGR];
    [longPressGR release];
#endif
#if USE_TAP
    UITapGestureRecognizer *tapGR = 
    [[UITapGestureRecognizer alloc] initWithTarget:self 
                                                action:@selector(handleTap:)];
    [self addGestureRecognizer:tapGR];
    [tapGR release];
#endif

コールバック メソッドは、このクラスで次のように定義されます。

- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"LONG PRESS");
}

- (void)handleTap:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"TAP");
}

iPhoneの専門家は、なぜこれが起こっているのか考えていますか?

4

1 に答える 1

1

私の知る限り、3.2 と iOS 4 のマーカーには、マーカーのドラッグを処理するための長押しジェスチャが既に関連付けられています。長押しジェスチャ認識機能に干渉している可能性がありますか? たぶんそれが短い期間が機能する理由です。組み込みの長押し認識機能ができる前に、ジェスチャをキャッチします。

  • これは単なる推測です*
于 2010-09-15T08:34:52.297 に答える