6 Stimmen

Fügen Sie Funktionalität zum Standard-Pan-Gesture-Recognizer in einem UIScrollView hinzu

Ich versuche, den Finger in einem UIScrollView zu verfolgen. Ich habe UIScrollView untergeordnet (siehe unten), aber leider überschreibt der Gestenrecognizer, den ich hinzufüge, den Standard.

Als Ergebnis funktioniert NSLog(@"Pan"), aber leider scrollt die Ansicht nicht mehr.

Wie kann ich beide Gestenerkennungen gleichzeitig zum Laufen bringen?

Danke.

- (void)viewDidLoad:(BOOL)animated
{
    [super viewDidLoad:animated];

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    [scrollView addGestureRecognizer:panRecognizer];
}

- (void)pan:(id)sender {
    NSLog(@"Pan");
}

14voto

Michal Palczewski Punkte 918

Wenn Sie nicht möchten, dass es das Standardverhalten außer Kraft setzt, müssen Sie einfach beiden gestatten, gleichzeitig erkannt zu werden.

- (void)viewDidLoad:(BOOL)animated
{
    [super viewDidLoad:animated];

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    panRecognizer.delegate = self;
    [scrollView addGestureRecognizer:panRecognizer];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
     return TRUE;
}

- (void)pan:(id)sender {
    NSLog(@"Pan");
}

4voto

ios-lizard Punkte 846

EDIT: Diese Methode funktioniert! Sie müssen einfach canCancelContentTouches so früh wie möglich festlegen (ich mache es in viewDidLoad).

URSPRÜNGLICHE ANTWORT: Ich habe einen neuen Ansatz ausprobiert, aber leider funktioniert es nicht vollständig.

Statt einen Gestenerkenner hinzuzufügen, unterklasse ich den UIScrollView und schreibe meine eigenen touchesBegan, touchesMoved usw. Methoden.

So weiß ich, wo der Benutzer berührt, ABER leider löst der PanGestureRecognizer jedes Mal touchesCancelled aus, wenn ich anfange zu scrollen, auch nachdem ich canCancelContentTouches auf NEIN gesetzt habe.

Weiß jemand warum? Ich habe auch dies gefunden.

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