8 Stimmen

Problem mit UITapGestureRecognizer für Doppeltippen

Ich habe zwei UITapGestureRecognizer : singleTap y doubleTap mit zwei verschiedenen Aktionen initialisiert.

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
[singleTap requireGestureRecognizerToFail:doubleTap];
[doubleTap setNumberOfTapsRequired:2];
[imageView addGestureRecognizer:doubleTap];
[imageView addGestureRecognizer:singleTap];

Wenn ich meine App im Simulator ausführe, reagiert der Einfachtipp korrekt, aber nicht der Doppeltipp! Wenn ich doppelt klicke, passiert nichts. Ich vermute, dass iOS den Doppeltipp nicht erkennt, weil die Aktion des einfachen Taps nicht aufgerufen wird (aufgrund von [singleTap requireGestureRecognizerToFail:doubleTap]; ), aber ich kann nicht verstehen, warum es die Aktion nicht ausführt handleDoubleTap .

6voto

PeyloW Punkte 36534

Ich denke, das Problem ist, dass UIImageView y UILabel überschreiben beide den Standardwert von YES für die userInteractionEnabled Eigenschaft und setzt sie auf NO .

hinzufügen imageView.userInteractionEnabled = YES; und versuchen Sie es erneut.

6voto

18446744073709551615 Punkte 15274

Der folgende Code funktioniert bei mir:

- (void)handleTap:(UIGestureRecognizer*)gr {
    NSLog(@"----------------- tap ----------------");
}
- (void)handleDoubleTap:(UIGestureRecognizer*)gr {
    NSLog(@"================= double tap ============");
}
- (XXXView*)createXXXView {
    XXXView *view = [[[XXXView alloc] init] autorelease];
    view.xxx=...;//irrelevant

    UITapGestureRecognizer *dtr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    dtr.numberOfTapsRequired = 2;

    UIGestureRecognizer *tr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

    [tr requireGestureRecognizerToFail:dtr];
    [view addGestureRecognizer:tr];
    [view addGestureRecognizer:dtr];

    return view;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X