Comment faire pour que UIScrollView envoie des messages scrollViewDidScroll pendant les animations

Lorsque l'user fait défiler manuellement mon UIScrollView, la méthode scrollViewDidScroll de mon délégué est appelée à plusieurs resockets pendant l'animation, avec les valeurs nouvellement mises à jour de contentOffset. Lorsque j'appelle "[scrollView setContentOffset: 320 animated: YES", la méthode delegate est appelée de la même manière. J'ai décidé que la vitesse de défilement normale est trop rapide pour l'expérience user, alors j'ai inclus un ["scrollView setContentOffset: 320]" dans un bloc "animatedWithDuration:", comme le recommand Apple dans la reference de class UIView.

Mais … maintenant, ma méthode scrollViewDidScroll n'est appelée qu'une seule fois au début de l'animation avec la valeur finale, et non plus pendant l'animation. J'ai le même effet quand j'utilise les anciennes methods "beginAnimations:".

Alors … quelqu'un sait comment résoudre cela?

À propos, la méthode "setContentOffset" de UIScrollView montre le même comportement. Il était utilisé pendant les animations, et maintenant il n'est appelé qu'une seule fois.

Grâce à l'indice de Fichek, je me suis mis au travail. Comme l'a dit M. Fichk, vous ne recevez aucune notification de modification de propriétés pendant l'animation. L'astuce consiste donc à s'assurer que tout ce qui dépend de la propriété modifiée est également animé en même time. Vous devez configurer leurs animations dans le même bloc que la propriété d'origine. Si vous définissez ensuite "UIViewAnimationOptionAllowUserInteraction" sur l'animation, toute interaction continue de l'user des mêmes propriétés fonctionnera toujours – et étonnamment bien, je dois dire.

Pour mon cas concret – pour garder une vue traînée immobile, tandis que le UIScrollView défile en dessous – voici comment j'ai configuré mon animation:

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ [theScrollView setContentOffset:offset]; // compute newCenter from the new offset theDraggedView.center = newCenter; } completion:^(BOOL finished) {}];