2016-09-29 5 views
0

J'utilise une minuterie et j'imprime le contentOffset.y d'un UIScrollView pour le suivre tout le temps.Suivre UIScrollView contentOffset tout le temps

Mais les problèmes sont UIScrollView met à jour sa valeur contentOffset seulement après qu'il est décéléré.

Je veux connaître la valeur contentOffset.y dans chaque milliseconde de minuterie et comment puis-je faire cela? Si je ne peux pas utiliser contentOffset du UIScrollView, existe-t-il un autre moyen de suivre une valeur similaire à contentOffset.y d'un scrollView?

J'utilise swift. Je vous remercie.

+0

Pourriez-vous poster le code de ce que vous avez essayé jusqu'à présent? –

+0

'laisser minuterie = Timer.scheduledTimer (timeInterval: 0,01, cible: self, sélecteur: #selector (self.timTick), userInfo: nul, répète: true) // déclarer le temps func timTick() { let scrOffset = scrollView.contentOffset.y impression (scrOffset) } // imprimer toutes les 0,01 secondes '@PoojaSrivastava –

Répondre

2

Au lieu de suivre les modifications en interrogeant une minuterie, vous pouvez observer les modifications apportées à la valeur. UIScrollView a une propriété delegate qui est appelée pour les événements de défilement (voir UIScrollViewDelegate) et contentOffset est conforme à la norme KVO.

Ou vous pouvez sous-classe UIScrollView et essayer les remplaçant setters (soit pour contentOffset ou boundsorigin est le le décalage, je ne suis pas sûr que l'on se soit, la classe appelle en interne - en utilisant la delegate est la solution préférée).

+0

Nous vous remercions de votre réponse. Mais les méthodes déléguées UIScrollView ne sont que des méthodes 'WillBegin..' et' DidEnd ... 'qui appellent seulement quand je ** termine ou commence ** à faire glisser, à défiler ou à dérouler le scrollView lui-même ** finir ou commencer à décélérer. J'ai besoin de connaître la valeur ** à chaque fois ** si mon doigt touche le téléphone ou non (ou) la vue déroulante a fini de décélérer ou pas. Je n'ai aucune idée de comment remplacer les setters que vous avez mentionnés. @Arkku –

+0

@thuraoo Le 'scrollViewDidScroll:' est appelé pendant le défilement à chaque fois que le décalage change, pas seulement début/fin. (Essayez-le.) Dans cette méthode, vous pouvez vérifier les propriétés 'isDragging',' isTracking' et/ou 'isDecelerating' de la vue déroulante. Vous pouvez également remplacer le 'willBegin' et' didEnd' pour faire glisser et/ou décélérer si vous avez besoin d'une manipulation spéciale à ces événements. – Arkku

+0

@thuraoo Pour savoir comment surcharger les setters, comme vous le feriez pour n'importe quelle méthode (n'oubliez pas d'appeler l'implémentation 'super'). Mais il est hautement improbable qu'il soit nécessaire, j'ai fait beaucoup de choses qui nécessitent un suivi précis des mouvements de la vue défilante et 'scrollViewDidScroll:' du délégué est presque toujours suffisant. – Arkku