1

如何在 iOS 4.0+ 中使用抖动事件?我测试了这个解决方案,但在 4.1 中不起作用。是否有可能发生了变化或者我做错了什么?运动开始:不工作

4

1 回答 1

2

从这个 SO 问题我如何检测何时有人摇晃 iPhone? 主要技巧是您需要一些 UIView(不是视图控制器)作为 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,此方法也有效。

于 2011-04-07T08:23:10.703 回答