2009-07-23 22 views

Antwort

36

Die APIs Sie suchen, sind in UIResponder:

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

Allgemeinen Sie diese einfach implementieren:

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

in Ihrem UIViewController Unterklasse (UIViewController eine Unterklasse von UIResponder ist). Außerdem möchten Sie es in MotionEnded behandeln: withEvent :, nicht motionBegan: withEvent :. motionBegan: withEvent: wird aufgerufen, wenn das Telefon ein Wackeln vermutet, aber das Betriebssystem kann den Unterschied zwischen einem absichtlich zitternden Benutzer und gelegentlichem Zittern feststellen (wie wenn er die Treppe hochgeht). Wenn das Betriebssystem entscheidet, dass es nach dem motionBegan nicht wirklich geschüttelt wurde: withEvent: wird aufgerufen, wird motionCancelled aufgerufen: anstelle von motionEnded: withEvent :.

+0

Bin ich richtig, wenn ich sage, dass wir den Code '[self becomeFirstResponder] hinzufügen müssen;' auf der Ansicht, benötigen wir schütteln Geste Arbeit? –

+1

Das hätten Sie richtig gesagt. Außerdem: (BOOL) canBecomeFirstResponder {return YES;} – akaru

3

Joe Hewitt vor kurzem committed einige Code zu Three20, die 3.0 Shake-Ereignis verwendet. Es scheint so, als müssten Sie nur einen einfachen Code innerhalb von -motionBegan:withEvent: innerhalb Ihrer UIResponder implementieren.

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

Ich stellte ein komplettes 3.0 Beispiel in diesem Thema:

How do I detect when someone shakes an iPhone?

+0

Danke, ich habe es gelesen. Bei diesem Ansatz wird jedoch keine neue API verwendet. – sashaeve

+0

Lesen Sie weiter, meine Antwort auf diesen Beitrag verwendet 3.0. Ich benutze die oben genannten Ereignisse, nur ich erkläre auch das bisschen darüber, dass ich die UIView als Ersthelfer einstellen muss, was entscheidend ist, damit es tatsächlich funktioniert. –

Verwandte Themen