我正在尝试制作一个有两个按钮的简单iphone应用程序:Start和Stop。当您点击开始时,它会开始聆听手机的麦克风音量,并使标签显示您在麦克风中说话的声音。当你点击停止时,它就会停止聆听。
我找到了一个名为SCListener的优秀课程,但我不确定如何实现它。现在我有一个连接到以下代码的按钮
-(IBAction)getVolume
{
SCListener *listener = [SCListener sharedListener];
[listener listen];
Float32 peakPower = [listener peakPower];
NSString *theString = [NSString stringWithFormat:@"Level is: %1.2f", peakPower];
[volumeLabel setText:theString];
}
这非常有效,但只获得一次音量。我试过做类似的事情:
[listener addObserver:self
forKeyPath:@"peakPower"
options:NSKeyValueObservingOptionOld
context:NULL];
但是因为peakPower是一个方法而不是一个变量,所以我不能把观察者放在它上面。我如何使用像SCListener这样的类来设置一个应用程序,允许用户按下按钮并使标签不断更新?
谢谢, JP
答案 0 :(得分:0)
KVO不起作用的原因与它“不是变量”的事实无关。 KVO观察键,而不是变量。完全可以观察没有底层变量的属性。在这种情况下它不起作用的原因是SCListener不会发出KVO通知。
最简单的解决方案:确定您想要的分辨率,并以该速率对SCListener进行定时器轮询。
答案 1 :(得分:0)
查克说
最简单的解决方案:确定您想要的分辨率,并以该速率对SCListener进行定时器轮询
同意。 更复杂的solutoin:在reading Apple's docs之后使SCListener KVO兼容并将结果返回给社区。它将使您的代码更清晰,教您KVO如何工作并解决SCListener的其他人的问题。