Wie kann ich programmgesteuert das Scrollen in einem UIScrollView erzwingen?
Hinweis: Die Antwort, die hier gegeben werden nicht für mich arbeiten.
Ich habe eine UIScrollView (nicht in einer Tabelle anzeigen, nur ein custom-Ding), und wenn der Benutzer ergreift bestimmte Maßnahmen, ich möchte töten, scrollen (ziehen oder Bremsen) innerhalb der Ansicht. Ich habe versucht zu tun, z.B. diese:
[scrollView scrollRectToVisible:CGRectInset([scrollView bounds], 10, 10) animated:NO];
auf der Theorie, dass, gegeben eine rect-das ist bereits bekannt, sichtbar, ist das scrolling einfach aufhören, wo es ist, aber es stellt sich heraus, dass dies nicht einen Effekt haben-scheinbar das scroll-view sieht, dass das angegebene Rechteck wird sich in Grenzen und führt keine Aktion aus. Ich kann Holen Sie sich das scrollen zu stoppen, wenn ich eine rect-das ist definitiv außerhalb die aktuell sichtbaren Grenzen, aber innerhalb der contentSize der Ansicht. Das scheint halt der Ansicht, wie erwartet... aber auch bewirkt, dass es zu springen an einen anderen Ort. Ich könnte wahrscheinlich ein wenig Herumspielen an den Rändern zu bekommen dies funktioniert einigermaßen OK, aber kennt jemand eine saubere Möglichkeit zum stoppen einer scroll-view, die macht Ihr Ding?
Dank.
InformationsquelleAutor der Frage Ben Zotto | 2010-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich spielte mit Ihrer ursprünglichen Lösung ein bisschen, und das scheint zu funktionieren. Ich denke, dass Sie fast gehabt, aber Sie waren nur die Verrechnung der rect, dass Sie zu viel verwendet, und vergessen, dass man nur scroll rect geradewegs zurück zu den ursprünglichen rect.
Die verallgemeinerte Lösung für alle-scrolling-action, ist dies:
[Bearbeiten] ab iOS 4.3 (und möglicherweise früher) dies scheint auch zu funktionieren
InformationsquelleAutor der Antwort David Liu
Für mich, David Lui, akzeptiert obige Antwort hat bei mir nicht funktioniert. Dies ist, was ich am Ende machen:
Für was es Wert ist, ich bin mit der iOS 6.0 iPhone-Simulator.
InformationsquelleAutor der Antwort TPoschel
Die tatsächliche Allgemeine Antwort ist, dass
[scrollView setContentOffset:offset animated:NO]
ist nicht das gleiche als[scrollView setContentOffset:offset]
![scrollView setContentOffset:offset animated:NO]
tatsächlich Stoppt alle Laufenden Animationen.[scrollView setContentOffset:offset]
nicht beenden, ohne laufende animation.scrollView.contentOffset = offset
: nicht zu stoppen einer mitlaufenden animation an., Die nicht dokumentiert überall, aber das ist das Verhalten, wie getestet auf iOS 6.1 & iOS 7.1 - wahrscheinlich auch vor.
Also die Lösung zum stoppen eines Laufenden animation /Verzögerung ist einfach:
Gut, im Grunde das, was David Liu sagte in seiner Antwort bearbeitet. Aber ich wollte deutlich machen, dass diese beiden APIs sind NICHT das gleiche.
InformationsquelleAutor der Antwort calimarkus
Dies ist, was ich für meinen Blättern, Ansichten und alle anderen zugehörigen Unterklassen:
Dieser legt die
targetContentOffset
zu denscrollView
's den aktuellen offset, wodurch das scrollen zu stoppen, weil es sein Ziel erreicht hat.Macht es wirklich Sinn, eine Methode zu verwenden, deren Zweck es ist, Benutzer könnte die gezielte
contentOffset
.Swift
InformationsquelleAutor der Antwort BridgeTheGap
Eigentlich ... Die meisten "modernen" Weg wäre -->
Dieser schaltet den gesture-recognizer, die verantwortlich ist für das scrollen, nur für einen moment, die töten den aktuellen touch. Die Benutzer benötigen würde, um heben Sie die finger und legen Sie es wieder nach unten zu starten, scrollen wieder.
Edit: eigentlich nur tötet den Strom ziehen, der Benutzer aber nicht sofort stoppen Sie die Verzögerung, wenn der scrollview ist in diesem Zustand derzeit. Dazu die akzeptierten Antworten Bearbeiten ist so ziemlich der beste Weg xD
InformationsquelleAutor der Antwort Xatian
Stoppen Sie den Bildlauf in swift:
InformationsquelleAutor der Antwort budidino
Der sauberste Weg sein wird, Unterklassen UIScrollView und die Bereitstellung Ihrer eigenen setContentOffset Methode. Dies sollte die Botschaft weitergeben, nur wenn Sie noch nicht eingeschaltet Ihre
freeze
Boolesche Eigenschaft.Etwa so:
Dann einfrieren:
InformationsquelleAutor der Antwort mvds
Diese Antwort war für mich:
Deaktivieren UIScrollView Abbremsen
InformationsquelleAutor der Antwort Johnny Rockex
Ich habe versucht, diese Methoden in der collectionview:
self.collectionView.collectionViewLayout.finalizeCollectionViewUpdates()
InformationsquelleAutor der Antwort Kalerfu