Frage

Arbeiten Sie mit Xcode 4.2 und versuchen Sie, sich mit den Uigesturer -Kognisern auseinanderzusetzen. Alles scheint bisher ziemlich gut zu laufen, aber ich habe immer noch ein paar Probleme.

Als ich die Swipe -Gesten -Erkenntnisse benutzte, war alles in Ordnung, es würde in allen Richtungen Swipes erkennen und dies kontinuierlich tun. Mein Problem ist nun, wenn die Pan -Gestenerkenner verwendet wird, erkennt es die erste Pfanne, die einwandfrei ist, weigert sich dann jedoch nur, weitere Gesten zu akzeptieren. So kann ich nach Bedarf Gegenstände ungefähr einmal bewegen, aber danach kann ich nichts tun.

Ich stelle meine Geste wie folgt ein:

UIPanGestureRecognizer *panBody = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panBody:)];
[bodyGestureView addGestureRecognizer:panBody];

Dann ist dies meine "Panbody" -Methode, die alles umgeht:

- (void)panBody:(UIPanGestureRecognizer *)recognizer
{
CGPoint translate = [recognizer translationInView:self.view];

CGRect bodyPanelFrame = bodyPanel.frame;
bodyPanelFrame.origin.x += translate.x;
bodyPanelFrame.origin.y += translate.y;
recognizer.view.frame = bodyPanelFrame;

CGRect topPanelFrame = topPanel.frame;
topPanelFrame.origin.x += translate.x;
topPanelFrame.origin.y += translate.y;
recognizer.view.frame = topPanelFrame;

CGRect sidePanelFrame = sidePanel.frame;
sidePanelFrame.origin.x += translate.x;
sidePanelFrame.origin.y += translate.y;
recognizer.view.frame = sidePanelFrame;

NSLog(@"Panning");

if (recognizer.state == UIGestureRecognizerStateEnded)
{
    bodyPanel.frame = bodyPanelFrame;

    if((topPanel.frame.origin.x + translate.x) <= 193)
    {
        topPanel.frame = CGRectMake(topPanelFrame.origin.x, topPanel.frame.origin.y, topPanel.frame.size.width, topPanel.frame.size.height);
    }
    else
    {
        topPanel.frame = CGRectMake(193, 0, topPanel.frame.size.width, topPanel.frame.size.height);
        NSLog(@"Top panel not in frame");
    }

    if((sidePanel.frame.origin.y + translate.y) < 57)
    {
        sidePanel.frame = CGRectMake(sidePanel.frame.origin.x, sidePanelFrame.origin.y, sidePanel.frame.size.width, sidePanel.frame.size.height);
    }
    else
    {
        sidePanel.frame = CGRectMake(0, 56, sidePanel.frame.size.width, sidePanel.frame.size.height);
        NSLog(@"Side panel not in frame");
    }
}
}

Bodypanel, Toppanel und Sidepanel sind Iboutlets, die mit Uiview überlagert sind.

Wenn jemand etwas Licht auf diese Informationen werfen könnte, wäre das großartig, weil ich absolut keine Ahnung habe, was los ist !!

Vielen Dank,

Matt

War es hilfreich?

Lösung

Zuerst würde ich das überprüfen

if (recognizer.state == UIGestureRecognizerStateChanged)

Bevor Sie Ihre Übersetzungen durchführen (es gibt viele andere mögliche Zustände, die Sie nicht rechtfertigen würden, Maßnahmen zu ergreifen). Außerdem würde ich die Übersetzung bei jedem Rückruf zurücksetzen

- (void)setTranslation:(CGPoint)translation inView:(UIView *)view

Wenn der Gestenerkenner stoppt, kann es sein, dass ein anderer Gestenerkenner ihn stört. Haben Sie dort noch einen aktiven UISWIPegesturer -Wert? Wenn ja, sollten Sie wahrscheinlich einen von ihnen deaktivieren. Sie können sich diese Methode auch ansehen

- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer

Auf diese Weise können Sie angeben, welcher Erkenntnis Priorität erhalten sollte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top