【问题标题】:Watch functions value观察函数值
【发布时间】:2009-03-11 05:28:13
【问题描述】:

我正在尝试制作一个简单的 iphone 应用程序,它有两个按钮:开始和停止。当您点击开始时,它会开始收听手机的麦克风音量,并让标签显示您对麦克风说话的音量。当您点击停止时,它会停止收听。

我发现了一个很棒的类,叫做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

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    KVO 不起作用的原因与它“不是变量”这一事实无关。 KVO 观察,而不是变量。完全可以观察没有基础变量的属性。在这种情况下它不起作用的原因是 SCListener 不会发出 KVO 通知。

    最简单的解决方案:确定您想要的分辨率并让计时器以该速率轮询您的 SCListener。

    【讨论】:

      【解决方案2】:

      查克说

      最简单的解决方案:确定您想要的分辨率并让计时器以该速率轮询您的 SCListener

      同意。 更复杂的解决方案:在reading Apple's docs 之后使 SCListener KVO 兼容,并将结果回馈给社区。它将使您的代码更干净,教您如何使用 KVO 工作并使用 SCListener 解决其他人的问题。

      Monitor iPhone mic iPhone Mic volume

      【讨论】:

        猜你喜欢
        • 2019-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        相关资源
        最近更新 更多