在4.0+中摇晃iphone

时间:2011-04-07 08:13:53

标签: iphone ios4 accelerometer shake

如何在iOS 4.0+中使用摇动事件?我测试了这个解决方案但是没有在4.1中工作。是否有可能改变某些事情或者我做错了什么? motionBegan: Not Working

1 个答案:

答案 0 :(得分:2)

从这个问题How do I detect when someone shakes an 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];
}

不要忘记,如果您有其他视图从用户操作(如搜索栏或文本输入字段)成为第一响应者,您还需要在另一个视图重新占用时恢复摇动视图第一响应者状态! / p>

即使您将applicationSupportsShakeToEdit设置为NO。

,此方法仍然有效