iphone - 如何检测 iPhone 的震动并进行编程

标签 iphone iphone-sdk-3.0 delegates shake

我正在尝试在此页面上实现摇动“教程”,但我认为我遗漏了一些东西。我将他的加速度计功能复制到 myAppViewController.m 文件中,并在其中放入一些 nslog,以查看当我使用模拟器“摇动”功能时它是否会进入该功能。调试控制台中没有显示任何内容。

http://mithin.in/2009/07/28/detecting-a-shake-using-iphone-sdk

谁能解释一下我可能缺少什么?或者给我指一个教程?

我发现了这个,看起来很有希望,但我不知道如何“将其放入 UIView 中” How do I detect when someone shakes an iPhone?

<小时/>

编辑 - 由于已接受答案的建议,现在这是我的工作代码。

这是我在 3.0 iphone sdk 中检测摇动手势的代码。

-(BOOL)canBecomeFirstResponder {
    return YES;
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

- (void)viewWillDisappear:(BOOL)animated {
    [self resignFirstResponder];
    [super viewWillDisappear:animated];
}


- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    NSLog(@"{motion ended event ");

    if (motion == UIEventSubtypeMotionShake) {
        NSLog(@"{shaken state ");

    }
    else {
        NSLog(@"{not shaken state ");       
    }
}

最佳答案

这是我的有效答案:

//MainViewController.m

-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(shake) 
                                 name:@"shake" object:nil];

    if(event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake)
        NSLog(@"motion Began");
}

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(shake)
                                                 name:@"shake"
                                               object:nil];
    if(event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake)
        NSLog(@"motion Ended");
}

-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(shake) 
                                                 name:@"shake" 
                                               object:nil];
    if(event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake)
        NSLog(@"motion Cancelled");
}

-(void)viewDidLoad {
    [super viewDidLoad];

    [self becomeFirstResponder];
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    [self resignFirstResponder]; 

}
<小时/>

我只用模拟器进行了测试,它返回了我:

2010-06-22 12:40:48.799 Cocktails[14589:207] motion Began

2010-06-22 12:40:48.800 Cocktails[14589:207] motion Ended

我希望这会有所帮助,因为我花了 2 个小时来做​​这项工作。

关于iphone - 如何检测 iPhone 的震动并进行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1340492/

相关文章:

iphone - 删除 ONE 本地化的正确方法

iphone - 核心数据集ReturnsDistinctResult不起作用

iPhone - 如何使用具有复杂参数的performSelector?

c# - 为什么 .net 委托(delegate)赋值运算符没有将引用分配给原始委托(delegate)?

ios - 自定义委托(delegate)方法未触发

iphone - 以编程方式调用 segue 不起作用

ios - 确定用户是在室内还是室外?

iphone - 我的 TableView 上的删除功能似乎不起作用

iPhone SDK 3.0 应用内电子邮件 - 更改导航栏色调颜色

使用通用 T 作为按钮的 C# 委托(delegate)