2011-04-06 3 views
1

J'ai une application contenant un UIScrollView avec Paging = OUI et le code de test suivant:Désactiver touches/défilement pendant le traitement

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    sleep(1); 
} 

Si l'utilisateur exécute plusieurs grands coups au cours de cette 1 seconde sommeil, tous les événements de glissement sont effectuées une fois que le thread principal a été libéré - donnant un effet "sauvage".

Y at-il un moyen de désactiver les touches/balayages pendant que ce travail de blocage est effectué (bien sûr, l'idéal est de ne pas bloquer le fil principal ici, mais pas toujours possible!).

J'ai essayé d'envelopper le «sommeil» avec setUserInteraction = NO/YES et setScrollingEnabled = NO/YES mais sans n'importe quelle chance.

+0

Que faites-vous dans le thread principal else donc il est plein de charge? –

+0

Le délai n'est pas vraiment 1 seconde - juste pour la démo. Cela peut être très court, mais tout balayage effectué pendant que certains travaux sont en cours provoque ce comportement. – Egil

+0

Eh bien quoi que vous, vous devez déplacer le traitement à un thread séparé afin que le scrollview reste réactif. –

Répondre

0

Mon ami a rencontré ce problème lorsqu'il voulait désactiver les taps après une action pendant une période donnée. Ce que vous voulez faire, c'est tirer parti de la méthode performSelector: withObject: afterDelay: de NSObject.

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    userInteractionEnabled = NO; 
    [self performSelector:@selector(enableUserInteraction) withObject:nil afterDelay: 1]; 
} 

- (void)enableUserInteraction { 
    userInteractionEnabled = YES; 
} 

Ceci est difficile que je n'ai pas probablement le droit de syntaxe, mais vous devriez être en mesure de suivre cela, et vous pouvez l'utiliser partout où vous jugerez utiles. Désactivez l'interaction de l'utilisateur, puis configurez un événement timer pour appeler une fonction afin de le réactiver après une période de temps spécifiée.

Questions connexes