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 音量框?