Die Begrenzung des scrollbaren Bereichs in UIScrollView
Ich habe eine UIScrollView ist, dass scrollen eine ziemlich große UIView.
Zu bestimmten Zeiten will ich begrenzen den Bereich kann der Benutzer einen Bildlauf in. Zum Beispiel, ich darf nur wollen, um Ihnen zu erlauben Blick in das untere Viertel der anzeigen.
Ich bin in der Lage, zu begrenzen das Gebiet durch überschreiben scrollViewDidScroll und dann ruft setContentOffset, wenn die Sicht zu weit gescrollt. Aber auf diese Weise ich kann es nicht bounce zurück, wie reibungslos das UIScrollView kann natürlich beim scrollen über die Grenzen der UIView.
Gibt es eine bessere Art und Weise zu begrenzen, den scrollbaren Bereich in einem UIScrollView?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde die property contentSize des scroll-Ansicht, um die Größe der Bereich, den Sie möchten, dass der Benutzer in der Lage sein zu verschieben und passen Sie den Rahmen.Herkunft der Untersicht solche der linken, oberen Grenze, die Sie möchten, angezeigt wird bei (0, 0) relativ zu dem scroll-Ansicht. Zum Beispiel, wenn Sie Ihre Ansicht ist 800 Punkte hoch, und Sie möchten, um zu zeigen, das untere Viertel, die Höhe der contentSize auf 200 und setzen die y-Komponente anzeigen.frame.Herkunft -600.
Habe ich etwas gefunden, das funktioniert für mich. Es lasst Sie scrollen Sie zum Punkt 0,0 aber nicht weiter:
Könnten Sie tun das gleiche für oben, unten oder rechts (x oder y)
Ein weiterer Ansatz ist das überschreiben der
UIScrollView
's Methode:- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
.Rückkehr
YES
wird, kann der Benutzer Blättern. RückkehrNO
nicht.HINWEIS: Dies wird deaktivieren Sie alle berührt, um alle Ansichten eingebettet innerhalb der
UIScrollView
dasspointInside
zurückNO
zu. Nützlich, wenn der Bereich, den Sie nicht wollen, um einen Bildlauf aus keine Interaktion.Diesem Beispiel erlaubt nur die
UIScrollView
Blättern, wenn der Benutzer einen Bildlauf über eineUITableView
. (EinUITableView
und zweiUIViews
sind eingebettet innerhalb derUIScrollView
)eine kleine Verbesserung, die auf Yoko ' s Antwort im Swift 4
was machen die scrollview animieren ist wirklich ähnlich zu dem, was sein soll zu tun. Die sich langsamer bewegen, wenn Sie in der "bounce" - Bereich wird nicht funktionieren und animation Laufzeit ist abhängig von der Entfernung (nicht konstant wie hier), wenn Sie wollen, um genau zu sein. Sie können auch versuchen, diese Logik in
scrollViewDidScroll
und sehen, wie es sich unterscheidet. Das wichtigste ist, dasssetContentOffset(_:,animated:)
werden mit animiert: false, so dass dieUIViewPropertyAnimator
's block kann es einzufangen und zu animieren