/ / (iphone) uiscrollview touch. annuler le contenu tactile et commencer le défilement - iphone, uiscrollview, touch

(iphone) uiscrollview touch. annuler le contenu tactile et commencer le défilement - iphone, uiscrollview, touch

La programmation UIScrollView me semble l’une des tâches les plus difficiles :(

J'ai des sous-vues dans UIScrollView.
Je veux laisser les sous-vues prendre l'événement touch en premier (et être glissées).
Lorsque les sous-vues pensent qu’il devrait abandonner les touches et que le défilement devrait commencer, il devrait pouvoir le dire au scrollView.

J'ai expérimenté avec touchesShouldCancelInContentView, mais cette méthode n'est appelée qu'une seule fois lorsque scrollView pense que l'utilisateur a réellement voulu "faire défiler".
Je dois prendre le contrôle du moment auquel annuler l’événement tactile pour les sous-vues ne dépend pas de la mise en oeuvre interne de uiscrollview.

Ma meilleure stratégie à ce jour est

sous-classe ScrollView

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
SYSLOG(LOG_DEBUG, "MyScrollView touchesBegan");

if (!self.dragging && self.isSubviewTouchable)
[self.nextResponder touchesBegan: touches withEvent:event];

[super touchesBegan: touches withEvent: event];
}

et de sous-vue de scrollView

lorsque la sous-vue doit être relâchée et que le scrollView prend les événements tactiles, etc.

self.myScrollView.isSubviewTouchable = false;
[self touchesEnded: touches withEvent: event];

et dans la classe déléguée de scrollView, je redéfinis la valeur bool.

- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
self.myScrollView.isSubviewTouchable = true;
}

Le problème est, appelant touchesEnded de la sous-vuene libère pas réellement l’événement tactile, semble-t-il. En outre, je ne vois pas scrollView recevoir un événement tactile après l’appel touchesEnded, ce que j’espérais.

Des idées?

Je vous remercie

Réponses:

0 pour la réponse № 1

J'ai déjà essayé de résoudre ce problème en utilisant lePanGesture. Vous pouvez probablement ajouter un UIPanGestureRegognizer à toutes les sous-vues que vous souhaitez déplacer, et faire ce que vous voulez dans leur sélecteur. Cela fonctionne bien même à l'intérieur de ScrollView.

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)];
[panGesture setDelegate:self];
[subviewtoMove addGestureRecognizer:panGesture];