Frage

Ich versuche, eine UIScrollView zu implementieren, bei der horizontales Schwenken durch Bilder in der Bildlaufansicht scrollt, vertikales Schwenken jedoch eine andere Aktion ausführt, die ich habe.Im Moment habe ich eine UIScrollView, die mit deaktiviertem vertikalem Scrollen paginiert ist und gut zum Scrollen durch Bilder funktioniert, aber ich versuche verrückt, einen Weg zu finden, vertikale Schwenks abzufangen und meine eigene Methode aufzurufen, anstatt die vertikalen Schwenks einfach aufzufressen die Scrollansicht.Ich konnte es tun

    UIPanGestureRecognizer *panUp = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
[self.scrollView addGestureRecognizer:panUp];
[scrollView.panGestureRecognizer setEnabled:NO];

Dadurch habe ich die vollständige Kontrolle über das Schwenken in meinem handlePanGesture:Methode, aber das ist nicht besonders hilfreich, weil ich dann das Gefühl habe, dass ich im Wesentlichen die gesamte Bildlauflogik neu schreiben muss, die ich vermeiden möchte.Für jede Hilfe oder Anleitung, wie dies erreicht werden kann, wären wir sehr dankbar.

Danke!

War es hilfreich?

Lösung

Ich denke, das ist schwierig, wenn Sie eine Pan-Geste wegen der Verwendung dieser Gesten der Scroll-Ansicht verwenden möchten.Wenn Sie jedoch einen Swipe verwenden könnten, ist es einfach zu implementieren.

generasacodicetagpre.

Ich habe das getestet, und es funktionierte gut, um den Handler anzurufen, und Sie müssen den Pan-Geste-Erkennerkerzizer der Scroll-Ansicht nicht deaktivieren (In meinem Test wurde die Scroll-Ansicht groß genug und der Inhalt ist kurz genug, da es keine gabVertikales Scrollen - Ich weiß nicht, ob dies notwendig ist oder nicht).

Andere Tipps

Ab iOS 5, UIScrollView enthüllt seine UIPanGestureRecognizer.Legen Sie Ihre benutzerdefinierten Wischbewegungen fest delegate Zu self und machen Sie den „gesteRecognizer“ zu einer Eigenschaft oder einem Ivar und sorgen Sie dafür, dass Ihre Klasse dem entspricht <UIGestureRecognizerDelegate> Protokoll.Dann implementieren UIGestureRecognizerDelegate'S – gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: etwa so:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([gestureRecognizer isEqual:self.swipe] && [otherGestureRecognizer isEqual:self.scrollView.panGestureRecognizer])
    {
         return NO;
    }
    return YES; // the default for this method
}

Ich habe ein hinzugefügt UIPanGestureRecognizer dann einrichtengestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: so was:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    if ([gestureRecognizer isEqual:self.panGesture] && [otherGestureRecognizer isEqual:self.collectionView.panGestureRecognizer]){
        return YES;
    }
    return NO;
}

Ich habe auch einen Check-in hinzugefügt gestureRecognizerShouldBegin:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if ([gestureRecognizer isEqual:self.panGesture]) {
        if (gestureRecognizer.numberOfTouches > 0) {
            CGPoint point = [gestureRecognizer locationOfTouch:0 inView:gestureRecognizer.view];
            CGFloat distX = abs(self.collectionView.lastTouchPos.x - point.x);
            CGFloat distY = abs(self.collectionView.lastTouchPos.y - point.y);
            if (distX > distY) {
                return NO;
            }
        } else {
            return NO;
        }
    }
    return YES;
}

nur zu verwenden self.panGesture beim Schwenken nach oben oder unten.

Aktualisieren

https://stackoverflow.com/a/8603839/667834 scheint eine bessere Methode dafür zu haben gestureRecognizerShouldBegin

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if ([gestureRecognizer isEqual:self.panGesture]) {
        if (gestureRecognizer.numberOfTouches > 0) {
            CGPoint translation = [self.panGesture velocityInView:self.collectionView];
            return fabs(translation.y) > fabs(translation.x);
        } else {
            return NO;
        }
    }
    return YES;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top