So rufen Sie scrollViewDidScroll auf: auf die gleiche Weise wie UIScrollView, jedoch während einer benutzerdefinierten Animation?

Ich habe eine sehr große horizontal scrollende UIScrollView, die ihre Unteransichten wiederverwendet (verschiebt und aktualisiert sie, wenn sie außerhalb des sichtbaren Bereichs liegen, ähnlich wie UITableView Zellen wiederverwendet). Dies beruht auf dem Aufruf scrollViewDidScroll: delegate, der mir den tatsächlichen contentOffset gibt, und hier entscheide ich, wann eine bestimmte Unteransicht wiederverwendet werden soll. So weit, ist es gut.

Manchmal muss ich contentOffset programmgesteuert ändern, jedoch mit benutzerdefinierter Animation (Trägheit und Zurückspringen an die endgültige Position). Ich kann das ganz einfach mit der Kernanimation machen.

Das Problem ist, dass während der benutzerdefinierten Animation die Methode scrollViewDidScroll: delegate nicht aufgerufen wird -> Ich muss es manuell ausführen, damit die Wiederverwendung von Unteransichten funktioniert. Ich habe versucht, es mit einem Timer aufzurufen, der alle 0,02 Sekunden abfeuert. Nun gibt es zwei Probleme:

Ich muss UIScrollView contentOffset mithilfe von [[_scrollView.layer presentationLayer] bounds] .origin.x abrufen, da sich während der Animation das normale _scrollView.contentOffset nicht ändert.

Die Informationen von presentationLayer reichen jedoch nicht für eine exakte Synchronisierung aus - manchmal ist es etwas spät.

Problem ist, wenn das neue contentOffset von der aktuellen Position entfernt ist. Es sieht so aus, als ob die integrierte UIScrollView-Animation CAKeyframeAnimation ist, und scrollViewDidScroll sollte für Schlüsselbildpositionen aufgerufen werden. Aber ich kann diese nicht bekommen.

Wenn ich auf timer angewiesen bin wasnicht Bei der Synchronisation mit Keyframes werden Ansichten an falschen Stellen wiederverwendet und ich kann sie während der Animation überhaupt nicht sehen.

Kann jemand etwas Licht ins Dunkel bringen, wie und wann UIScrollView scrollViewDidScroll während setContentOffset: X animated: YES aufruft? Ist es möglich, es zu reproduzieren, ohne gegen die Appstore-Regeln zu verstoßen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage