UISlider 跟随音量,不工作

Posted

技术标签:

【中文标题】UISlider 跟随音量,不工作【英文标题】:UISlider following sound volume, not working 【发布时间】:2012-07-10 07:54:47 【问题描述】:

我的 iPhone 应用程序出现声音问题。 我有一个 UISlider 对象,用于调整音量。

当它出现时,我使用基于以下行的代码来设置滑块的初始值:

AudiosessionGetProperty ('chov',&dataSize,&volume);

而且效果很好。然后,当我激活设备的硬件音量按钮时,我希望滑块相应地移动。 但是这部分基于这种代码:

AudioSessionPropertyID volumeChangeID=kAudioSessionProperty_CurrentHardwareOutputVolume;
AudioSessionAddPropertyListener(volumeChangeID,handleSoundVolume,self);

效果不太好。 我可以看到回调函数:handleSoundVolume 仅在播放某些声音时才被调用,否则不会被调用。 另一方面,AudioSessionGetProperty 提供的值始终是正确的,与声音播放与否无关。 这是为什么呢?

我认为 AudioSessionGetProperty 和 AudioSessionAddPropertyListener 是“一起”工作的,但事实并非如此。

看看iPod touch上默认的Music应用,看来我想做的事情还是很有可能的。

感谢您提供任何信息。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,回调对我来说根本不起作用。

最好的解决方案是为属性 AVSystemController_SystemVolumeDidChangeNotification 添加一个观察者到 NSNotificationCenter。

NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(volumeChanged:)
               name:@"AVSystemController_SystemVolumeDidChangeNotification"
             object:nil];

你有方法

- (void)volumeChanged:(NSNotification*)notification

     float volume = [[[notification userInfo]
                        objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
                      floatValue];

顺便说一下,我建议您不要使用“chov”,而是应该使用常量

kAudioSessionProperty_CurrentHardwareOutputVolume

【讨论】:

以上是关于UISlider 跟随音量,不工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 UISlider 更改音量时隐藏 Iphone 音量框?

如何使用 UISlider 控制 iOS 系统音量

如何在 iphone 中使用 uislider 设置音量控制?

iOS 7 - 自定义 UISlider 设计不起作用

UISlider

tvOS - 替换 UISlider