2016-06-16 5 views
0

Ich habe ein sehr seltsames Problem. Grundsätzlich implementiere ich eine Drag & Drop-Ansicht mit einem Klick auf das horizontale 1D-Raster. Nun, wenn ich eine Ansicht ziehe und ihre Mittelkoordinate X größer oder kleiner als eine andere Ansicht ist, sollte die nicht gezogene Ansicht links oder rechts von ihrer ursprünglichen Position animiert werden.UIGestureRecognizer wird nicht aufgerufen, nachdem UIViews Frame in UIScrollView gesetzt wurde

Dies funktioniert die meiste Zeit gut. Aber in einigen speziellen Fällen funktioniert es nicht. In bestimmten Situationen erhält die Ansicht keine Gestenrückrufe mehr. Ich kann dieses Problem reproduzieren und habe herausgefunden, dass alles funktioniert, wenn ich den Code lösche, der die Animation anwendet.

Im Grunde ist dies der Code, der aufgerufen wird, wenn die gezogene Ansicht in einer Position ist, wo die Ansicht unten sollte nach links oder rechts

/** 
* Animate element to its saved position 
*/ 
- (void)switchElement:(unsigned int)draggedIndex with:(unsigned int)otherIndex 
{  
    // first animate 
    UIView *view  = views[draggedIndex]; 
    UIView *otherView = views[otherIndex]; 
    // IF I COMMENT THIS OUT, EVERYTHING WORKS FINE 
    otherView.frame = [self getImageRectForIndex:draggedIndex]; 
    // now switch internally 
    if(draggedIndex != otherIndex) 
    { 
     // switch views 
     views[draggedIndex]  = otherView; 
     views[otherIndex] = view; 
    } 
} 

Jede Idee bewegt werden, wenn es etwas im Auge zu haben ist Wenn ich UIViews animiere und Gestenerkenner an sie angehängt habe?

Wenn jemand will, kann ich die ganze Klasse hier einfügen, um es zu testen.

LÖSUNG Ich habe einige "Highlight" Ansichten in meinem Design. Und ich habe die relevanten Ansichten versehentlich hinter diese transparenten Hintergrundansichten gerückt. So jetzt verwende ich addSubview: aber insertSubview:atIndex: statt.

Aber Markierung @ Anthonin C. antwortet als der richtige. Weil es mich in die richtige Richtung zeigte (ich fand es durch Überschreiben der hitTest: -Methode)

+0

Blockiert Ihre Animation die Benutzerinteraktion? Suchen Sie nach UIViewAnimationOptionAllowUserInteraction, es könnte Ihnen helfen. z.B. http://stackoverflow.com/questions/5181216/user-interaction-with-uiview-and-animation-completion-blocks – Dominic

+0

Nun, ich habe den Code vereinfacht. Es ist nicht mit der Animation verbunden. Weil das Setzen des Rahmens direkt auch alle Gestenrückrufe zu blockieren scheint –

+0

Ich habe ein Repo mit einem einfachen Beispiel erstellt –

Antwort

1

Würden Sie bitte die otherView.bounds-Eigenschaft verfolgen, um zu überprüfen, dass Ihre Berührung nicht außerhalb der Grenzen ist. Ich habe dieses Problem kürzlich konfrontiert und Apple-Dokumentation bieten Lösung hier: Delivering touch events to a view outside the bounds of its parent view

Sorry, ich habe nicht genug Ruf, um Ihre Antwort zu kommentieren.

+0

tat dies bereits. Ich verfolge den Rahmen und das Flag userinteractionenabled. alles sieht gut aus –

+0

mh, aber dieser Artikel ist eine gute Referenz .. wies mich auf einige interessante Richtungen .. wird meine Ergebnisse später einfügen –

+0

Ich habe einen Repo erstellt ... siehe Bearbeiten meiner Frage –

Verwandte Themen