ios - 我如何检测有人在摇动 iPhone?

标签 ios accelerometer motion-detection shake

我想在有人摇动 iPhone 时使用react。我并不特别在意他们如何摇晃它,只在乎它被大力挥动了一秒钟。有谁知道如何检测这个?

最佳答案

在 3.0 中,现在有一种更简单的方法 - Hook 新的运动事件。

主要技巧是您需要一些 UIView(不是 UIViewController)作为 firstResponder 来接收摇动事件消息。以下是您可以在任何 UIView 中使用以获取摇动事件的代码:

@implementation ShakingView

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if ( event.subtype == UIEventSubtypeMotionShake )
    {
        // Put in code here to handle shake
    }

    if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
        [super motionEnded:motion withEvent:event];
}

- (BOOL)canBecomeFirstResponder
{ return YES; }

@end

您可以轻松地将任何 UIView(甚至系统 View )转换为可以获取摇动事件的 View ,只需通过仅使用这些方法对 View 进行子类化(然后选择这种新类型而不是 IB 中的基本类型,或使用它分配 View 时)。

在 View Controller 中,你想设置这个 View 成为第一响应者:

- (void) viewWillAppear:(BOOL)animated
{
    [shakeView becomeFirstResponder];
    [super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
    [shakeView resignFirstResponder];
    [super viewWillDisappear:animated];
}

不要忘记,如果您有其他 View 从用户操作(如搜索栏或文本输入字段)成为第一响应者,您还需要在其他 View 退出时恢复摇晃 View 第一响应者状态!

即使您将 applicationSupportsShakeToEdit 设置为 NO,此方法也有效。

关于ios - 我如何检测有人在摇动 iPhone?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/150446/

相关文章:

c - 来自加速度计的数据

java - 实现 Android 手势识别工具框架,在生成的构建文件中接收错误

artificial-intelligence - 人工神经网络的运动识别

objective-c - 如何链接到 iOS 5 中的特定首选项面板

ios - Pod Spec Lint CoreSimulator 检测到 Xcode.app 重定位或 CoreSimulatorService 版本更改

点击页面主体时 Android/iOS 输入聚焦

android - 智能手机加速度计手势算法

mobile - J2ME加速度计有什么好的引用资料吗,我似乎没有找到

opencv - opencv中的快速运动检测

ios - 使用 UIScrollView 的垂直分页