iOS:如何识别连续摇动事件

时间:2014-05-15 07:27:45

标签: ios iphone

我尝试使用函数

- (BOOL) canBecomeFirstResponder{
    return YES;
 }
- (void) viewWillAppear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeDetected:) name:@"NOTIFICATION_SHAKE" object:nil];

    [self.view becomeFirstResponder];
    [super viewWillAppear:animated];
}

- (void) viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [self.view resignFirstResponder];
    [super viewDidDisappear:animated];
}


- (void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.subtype == UIEventSubtypeMotionShake) {
   //action if detect shake
    [[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATION_SHAKE" object:self];

}

}

但是当进行连续摇动时,该功能不会自动检测到摇动事件。这里的问题是如何定义连续摇动事件?

1 个答案:

答案 0 :(得分:1)

通常,当您摇动设备时,系统会向您的视图控制器发送事件:motionBegan - > motionEnded。

当您持续摇晃时,系统会发送消息motionBegan - > motionCancelled(因为它不再是一次震动)多次。

您可以尝试使用此序列的事件,但我认为您必须使用加速度计,请参阅this answer(diceshaker)。