如何创建一个循环来检查每次迭代时是不是有新的 IBAction 输入?
Posted
技术标签:
【中文标题】如何创建一个循环来检查每次迭代时是不是有新的 IBAction 输入?【英文标题】:How do I make a loop that checks for new IBAction input on every iteration?如何创建一个循环来检查每次迭代时是否有新的 IBAction 输入? 【发布时间】:2011-12-20 23:17:18 【问题描述】:我想制作一个循环播放声音文件(非常短暂的哔声)并等待时间等于延迟然后重复,这个循环一直运行直到我按下暂停按钮,等待时间延迟可以通过滑块按钮更改循环运行时。
- (void)playSound
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/Metronome-Sound.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = 0;
[audioPlayer play];
- (IBAction)playSelected:(UIButton *)sender
if (stateOfMetronome == 0)
stateOfMetronome = 1;
while (stateOfMetronome == 1)
[self playSound];
[NSThread sleepForTimeInterval:delay];
- (IBAction)pauseSeleted:(UIButton *)sender
if (stateOfMetronome == 1)
stateOfMetronome = 0;
[audioPlayer pause];
【问题讨论】:
【参考方案1】:我认为实现此目的最轻松的方法是使用NSTimer 设置重复。当您需要停止/暂停它时,只需使计时器无效。当你想启动它时,只需重新初始化它。使用此方法,您可以轻松控制何时触发延迟,并轻松自定义间隔。
另外,请记住,在休眠线程时,您可能会阻止所有 UI 交互。这可能意味着您无法在线程睡眠时播放/暂停,因为在睡眠时没有运行循环处理。详见NSThread。
【讨论】:
是的,请使用 NSTimer。轮询循环是邪恶的。 我刚开始为 iPhone 开发,所以看起来我有一些学习要做。谢谢。以上是关于如何创建一个循环来检查每次迭代时是不是有新的 IBAction 输入?的主要内容,如果未能解决你的问题,请参考以下文章