我正在使用加速度计在我的应用程序的屏幕上移动/更改内容。我还需要在视图控制器中检测 UIEventSubtypeMotionShake 以获取其他一些动画。
由于我的应用程序是一个简单的基于视图的应用程序,因此只有一个视图控制器充当 UIAccelerometerDelegate 和 FirstResponder(用于检测抖动事件)。在检测到第一个摇动手势后,我不需要通过 [accelerometer didAccelerate] 方法输入加速度计,因此我将加速度计委托设置为 nil。
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake)
{
NSLog(@"shake");
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
//my shake handling code
}
}
问题是没有正确检测到第一个抖动运动。我必须摇动 2 3 次或更多次才能触发 UIEventSubtypeMotionShake 事件,而在加速度计委托设为 nil 后,后续的摇动会被完美地检测到。
这一定会发生,因为 UIEventSubtypeMotionShake 又取决于加速度计 didAccelerate 事件,这些事件被我的代码覆盖。但我需要同时使用这两个事件。
另一种方法是处理/检测 [accelerometer didAccelerate] 中的抖动,就像它必须在 3.0 之前完成一样(如本问题的一些答案中所述),但为什么我必须为容易获得的东西编写代码?
是否有任何同时使用加速度计和 UIEventSubtypeMotionShake 的应用程序或代码示例?