如何检测有人摇晃 iPhone?

2024-01-30

我想在有人摇晃 iPhone 时做出反应。我并不特别关心他们如何摇动它,只是在瞬间用力挥动它。有谁知道如何检测这个?


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

主要技巧是您需要有一些 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(甚至系统视图)转换为可以获取摇动事件的视图,只需仅使用这些方法对视图进行子类化(然后选择此新类型而不是 IB 中的基本类型,或者在分配看法)。

在视图控制器中,您希望将此视图设置为第一响应者:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测有人摇晃 iPhone? 的相关文章

随机推荐