346 Stimmen

Wie erkenne ich, wenn jemand ein iPhone schüttelt?

Ich möchte reagieren, wenn jemand das iPhone schüttelt. Dabei ist es mir egal, wie es geschüttelt wird, sondern nur, dass es für den Bruchteil einer Sekunde heftig geschüttelt wurde. Weiß jemand, wie man das erkennen kann?

13voto

nhgrif Punkte 59828

In iOS 8.3 (vielleicht früher) mit Swift ist es so einfach wie das Überschreiben der motionBegan o motionEnded Methoden in Ihrem View-Controller:

class ViewController: UIViewController {
    override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent) {
        println("started shaking!")
    }

    override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
        println("ended shaking!")
    }
}

12voto

Dave Verwer Punkte 6129

Sie müssen den Beschleunigungsmesser über die Methode accelerometer:didAccelerate: überprüfen, die Teil des UIAccelerometerDelegate-Protokolls ist, und prüfen, ob die Werte einen Schwellenwert für die für eine Erschütterung erforderliche Bewegung überschreiten.

In der Methode accelerometer:didAccelerate: ganz unten in AppController.m im GLPaint-Beispiel, das auf der iPhone-Entwickler-Website verfügbar ist, gibt es einen anständigen Beispielcode.

10voto

Benjamin Ortuzar Punkte 7451

Dies ist der grundlegende Delegatencode, den Sie benötigen:

#define kAccelerationThreshold      2.2

#pragma mark -
#pragma mark UIAccelerometerDelegate Methods
    - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
    {   
        if (fabsf(acceleration.x) > kAccelerationThreshold || fabsf(acceleration.y) > kAccelerationThreshold || fabsf(acceleration.z) > kAccelerationThreshold) 
            [self myShakeMethodGoesHere];   
    }

Setzen Sie auch die in den entsprechenden Code in der Schnittstelle, z. B:

@interface MyViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UIAccelerometerDelegate>

7voto

Himanshu Mahajan Punkte 4603

Fügen Sie folgende Methoden in der Datei ViewController.m hinzu, die ordnungsgemäß funktionieren

    -(BOOL) canBecomeFirstResponder
    {
         /* Here, We want our view (not viewcontroller) as first responder 
         to receive shake event message  */

         return YES;
    }

    -(void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
    {
            if(event.subtype==UIEventSubtypeMotionShake)
            {
                    // Code at shake event

                    UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Motion" message:@"Phone Vibrate"delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
                    [alert show];
                    [alert release];

                    [self.view setBackgroundColor:[UIColor redColor]];
             }
    }
    - (void)viewDidAppear:(BOOL)animated
    {
             [super viewDidAppear:animated];
             [self becomeFirstResponder];  // View as first responder 
     }

7voto

camflan Punkte 15513

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X