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)
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
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 –
Ich habe ein Repo mit einem einfachen Beispiel erstellt –