2010-03-09 2 views
1

J'ai un très simplement sous-classe de UIButton qui se déclenche au large d'un événement personnalisé lorsque le bouton a été maintenu pendant 2 secondes. Pour ce faire, je l'emporterait sur:continueTrackingWithTouch: withEvent: pas appelé en permanence

// 
// Mouse tracking 
// 
- (BOOL)beginTrackingWithTouch:(UITouch *)touch 
        withEvent:(UIEvent *)event 
{ 
    [super beginTrackingWithTouch:touch withEvent:event]; 
    [self setTimeButtonPressed:[NSDate date]]; 

    return (YES); 
} 

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    [super continueTrackingWithTouch:touch withEvent:event]; 
    if ([[self timeButtonPressed] timeIntervalSinceNow] > 2.0) 
    { 
     // 
     // disable the button. This will eventually fire the event 
     // but this is just stubbed to act as a break point area. 
     // 
     [self setEnabled:NO]; 
     [self setSelected:NO]; 
    } 

    return (YES); 
} 

Mon problème est (ce qui est dans le simulateur, ne peut pas faire sur le travail de l'appareil tout à fait encore) « continueTrackingWithTouch: withEvent: » n'est pas appelé à moins que la souris est effectivement déplacé . Cela ne demande pas beaucoup de mouvement, mais il faut du mouvement.

En retour « OUI » dans ces deux, je devrais être configuré pour recevoir des événements en continu. Est-ce une bizarrerie du simulateur ou est-ce que je fais quelque chose de mal?

REMARQUE: userInteractionEnabled est réglé sur OUI.

NOTE2: Je pourrais configurer un minuteur beginTrackingWithTouch: withEvent: mais cela semble plus d'efforts pour quelque chose qui devrait être simple.

Répondre

2

Le comportement que vous décrivez est le comportement prévu. Le suivi est seulement pour suivre le mouvement.

Pour tester la durée de la touche, je suggère de démarrer une minuterie dans beginTrackingWithTouch qui déclenche l'événement après 2 secondes, et un cas de test dans endTrackingWithTouch qui annule le minuteur.