2009-07-23 11 views

risposta

36

Le API si sta cercando sono in UIResponder:

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event; 
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event; 
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event; 

In genere è sufficiente attuare questo:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
    if (event.type == UIEventSubtypeMotionShake) { 
    //Your code here 
    } 
} 

nella sottoclasse UIViewController (UIViewController è una sottoclasse di UIResponder). Inoltre, vuoi gestirlo in motionEnded: withEvent :, non motionBegan: withEvent :. motionBegan: withEvent: viene chiamato quando il telefono sospetta che l'agitazione stia accadendo, ma il sistema operativo può determinare la differenza tra un utente che agita intenzionalmente e agita in modo casuale (come salire le scale). Se il sistema operativo decide che non è stato un vero micromosso dopo motionBegan: withEvent: viene chiamato chiamerà motionCancelled: invece di motionEnded: withEvent :.

+0

Ho ragione se dico che abbiamo bisogno di aggiungere il codice '[auto becomeFirstResponder];' sulla vista abbiamo bisogno gesto agitare a lavoro? –

+1

Avresti ragione nel dirlo. Inoltre: (BOOL) canBecomeFirstResponder {return YES;} – akaru

3

Joe Hewitt ha recentemente committed un codice per Three20 che utilizza l'evento shake 3.0. Sembra che tu abbia solo bisogno di implementare un codice semplice all'interno di -motionBegan:withEvent: all'interno del tuo UIResponder.

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
    if (event.type == UIEventSubtypeMotionShake) { 
     ... 
    } 
} 
7

ho postato un esempio completo 3.0 in questa discussione:

How do I detect when someone shakes an iPhone?

+0

Grazie, l'ho letto. Ma questo approccio non utilizza nuove API. – sashaeve

+0

Continua a leggere, la mia risposta a quel post usa 3.0. Io uso gli eventi pubblicati sopra, solo che spiegherò anche la necessità di impostare l'UIView come primo soccorritore, fondamentale per il suo funzionamento effettivo. –