2016-09-29 18 views
0

Ich benutze einen Timer und drucke contentOffset.y von UIScrollView, um es zu verfolgen die ganze Zeit.Track UIScrollView contentOffset die ganze Zeit

Aber das Problem ist UIScrollView aktualisiert seinen contentOffset Wert nur, nachdem es abgebremst wird.

Ich möchte den contentOffset.y Wert in jede Millisekunde des Timers wissen und wie kann ich das tun? Wenn ich contentOffset des UIScrollView überhaupt nicht verwenden kann, gibt es eine andere Möglichkeit, einen ähnlichen Wert zu contentOffset.y eines scrollView zu verfolgen?

Ich benutze swift. Vielen Dank.

+0

Könnten Sie den Code von dem, was Sie bisher versucht haben, posten? –

+0

'lassen timer = Timer.scheduledTimer (TimeInterval: 0,01, Ziel: selbst, Selektor: #selector (self.timTick), userinfo: nil, wiederholt: true) // erklären die Zeit func timTick() { let scrOffset = scrollView.contentOffset.y Drucken (scrOffset) } // Drucken alle 0,01 Sekunden @ @ PoojaSrivastava –

Antwort

2

Anstatt die Änderungen durch Abfragen mit einem Zeitgeber zu verfolgen, können Sie Änderungen am Wert beobachten. UIScrollView hat eine delegate Eigenschaft, die für Scroll-Ereignisse aufgerufen wird (siehe UIScrollViewDelegate), und contentOffset ist KVO-kompatibel.

Oder Sie könnten UIScrollView Unterklasse und versuchen, die Setter überschrieben (entweder für contentOffset oder bounds wo origin die der Offset, ich bin nicht sicher, was man, wenn entweder die Klasse intern nennt - die delegate Verwendung ist die bevorzugte Lösung).

+0

Vielen Dank für Ihre Antwort. Aber die UIScrollView-Delegate-Methoden sind nur 'WillBegin..' und' DidEnd ... 'Methoden, die nur aufrufen, wenn ** ich fertig bin oder beginne ** Ziehen, Scrollen oder das ScrollView selbst ** beenden oder beginnen ** abzubremsen. Ich muss den Wert ** jedes Mal ** wissen, ob mein Finger das Telefon berührt oder nicht (oder) die Bildlaufansicht beendet wird oder nicht. Ich habe keine Idee, wie Sie die von Ihnen erwähnten Setter übersteuern können. @Arkku –

+0

@thuraoo Der 'scrollViewDidScroll:' wird während des Scrollens aufgerufen, wenn sich der Offset ändert, nicht nur beginnen/enden. (Probieren Sie es einfach aus.) Innerhalb dieser Methode können Sie die Eigenschaften 'isDragging', 'isTracking' und/oder' isDecelerating' der Bildlaufansicht überprüfen. Sie können auch 'willBegin' und' didEnd' zum Ziehen und/oder Abbremsen überschreiben, wenn Sie bei diesen Ereignissen eine spezielle Behandlung benötigen. – Arkku

+0

@thuraoo Wie Sie die Setter überschreiben, wie Sie jede Methode überschreiben würden (denken Sie daran, die 'Super'-Implementierung aufzurufen). Aber es ist höchst unwahrscheinlich, dass es notwendig ist, ich habe eine Menge Sachen gemacht, die genau die Bewegungen der Bildlaufansicht verfolgen müssen und "scrollViewDidScroll:" des Delegierten ist fast immer ausreichend. – Arkku

Verwandte Themen