我有一个基本的哔声,我在我的应用程序中加载了AVAudioPlayer。
如果我的手指没有平移我的MKMapView,它可以发出哔声。
我的哔哔声设定为每2秒播放一次。
当我开始平移地图视图,并且不要将手指从屏幕上移开时,蜂鸣声停止播放。
我记得NSUrlConnection在滚动表视图时也不会触发,我认为这可能是同样的问题,但我无法弄清楚如何将我的音频播放器添加到正确的运行循环中。
我设置了这样的播放器:
-(void)setupBeep
{
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/beep.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = 0;
if(error)
{
NSLog(@"Error opening sound file: %@", [error localizedDescription]);
}
}
我正在播放我的声音:
// plays a beeping sound
-(void)beep
{
[audioPlayer play];
}
之前有人遇到过这个问题吗?
答案 0 :(得分:1)
您是如何安排调用-beep
方法的?
我怀疑您在默认输入模式下向主运行循环添加了NSTimer
。你没有听到任何声音的原因是,当MKMapView
跟踪你的手指时,运行循环不在NSDefaultRunLoopMode
中 - 它位于UITrackingRunLoopMode
。
在NSRunLoopCommonModes
中尝试安排,其中包括默认和跟踪模式:
NSTimer *timer = [NSTimer timerWithTimeInterval:interval target:self selector:@selector(beep) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
另外,请注意NSTimer
保留其目标。重复计时器将自动重新计划,因此您需要调用其-invalidate
方法将其从循环中删除并允许目标被释放。
编辑:查看Apple的Threading Programming Guide: Run Loops以获取更详细的解释。