我尝试使用函数
- (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];
}
}
但是当进行连续摇动时,该功能不会自动检测到摇动事件。这里的问题是如何定义连续摇动事件?
答案 0 :(得分:1)
通常,当您摇动设备时,系统会向您的视图控制器发送事件:motionBegan - > motionEnded。
当您持续摇晃时,系统会发送消息motionBegan - > motionCancelled(因为它不再是一次震动)多次。
您可以尝试使用此序列的事件,但我认为您必须使用加速度计,请参阅this answer(diceshaker)。