您好 我试图在用户摇动设备时获得它,声音播放。然而,当我摇动它时,我被踢出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];
}
}
答案 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 ..]电话。