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?
Antworten
Zu viele Anzeigen?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!")
}
}
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.
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>
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
}
Sehen Sie sich das GLPaint-Beispiel an.
http://developer.apple.com/library/ios/#samplecode/GLPaint/Introduction/Intro.html