Accelerometer - Shake未被发现 - Cocoa Touch

时间:2011-04-18 23:27:41

标签: iphone objective-c xcode accelerometer

您好 我试图在用户摇动设备时获得它,声音播放。然而,当我摇动它时,我被踢出App

这是我用过的代码

-(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
{
    if (motion == UIEventSubtypeMotionShake)
    {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"whip" ofType:@"wav"];
        if (theAudio) [theAudio release];
        NSError *error = nil;
        theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
        if (error)
            NSLog(@"%@",[error localizedDescription]);
        theAudio.delegate = self;
        [theAudio play];    

    }

}

1 个答案:

答案 0 :(得分:3)

由于震动事件,应用程序没有崩溃。我刚用这段代码创建了一个小测试项目:

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

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

    [self becomeFirstResponder];
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if(motion == UIEventSubtypeMotionShake)
    {
        NSLog(@"Shake is working");
    }
}

这种行为正确。我建议将摇动代码注释掉并用一个简单的NSLog替换它,以确保摇动工作正常,然后从那里开始工作,一次测试一件。

此外,在viewDidDisappear代码中,我将颠倒这两行代码的顺序。 (差不多)总是先做[super ..]电话。