如何创建一个循环来检查每次迭代时是不是有新的 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 输入?的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是有新的 Windows 版本可用并以编程方式安装

python如何在循环中,每次循环都创建一个新的类?

如何在循环的每次迭代中将新图形保存为 png

如何遍历地图,修改地图但在每次迭代时恢复?

如何为网站创建通知?

如何检查TFS服务器上是否有新的更改?