我有一个带有MPVolumeView的项目。它是设置好的,它可以工作,唯一的问题是,当我静音设备时,文本"No Volume Available"会出现而不是MPVolumeView。当设备静音时,我更希望MPVolumeView的滑块被禁用。
volumeView是在视图volumeBounds中初始化的,具有该视图的边界。
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:volumeBounds.bounds] autorelease];
[volumeBounds addSubview:volumeView];
[volumeView sizeToFit];谢谢:)
如果您有兴趣帮助我做其他的事情,请查看https://stackoverflow.com/questions/2829234/mpvolumeview-in-a-uialertview。
发布于 2010-05-22 04:49:49
使用AudioServices侦听硬件卷。当卷变为零时,将MPVolumeSlider的alpha设置为零,并将您自己的禁用UISlider放在相同的位置。剥皮你的滑块看起来像音量滑块。
AudioSessionAddPropertyListener( kAudioSessionProperty_CurrentHardwareOutputVolume , ... );kAudioSessionProperty_AudioRouteChanged也可能是有用的。
如果您在MPVolumeView下遍历视图层次结构,您应该会找到一个UISlider。如果没有,或者它是隐藏的,您知道静音字符串正在显示。
编辑:
这描述了侦听器的函数原型。若要将消息传递给类的实例,请执行类似的操作:
void MyPropertyListener ( void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData );
void MyPropertyListener ( void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData ) {
if ( inID == kAudioSessionProperty_CurrentHardwareOutputVolume ) {
Float32 volume = *(Float32 *)inData;
[(MyDelegateClass *)inClientData hardwareVolumeChanged:volume];
}
}
AudioSessionAddPropertyListener( kAudioSessionProperty_CurrentHardwareOutputVolume ,
MyPropertyListener , aDelegateInstance );发布于 2015-03-03 08:18:18
最后,为了简单起见,我得到了这个解决方案。
在目标C中:
[UILabel appearanceWhenContainedIn: [MPVolumeView class], nil].textColor = [UIColor clearColor];在Swift:
UILabel.appearanceWhenContainedWithin([MPVolumeView.self]).textColor = UIColor.clearColor()关于appearanceWhenContainedWithin方法,请参考以下答案:Swift中的appearanceWhenContainedIn
它只是隐藏“无卷可用”文本,而不是用禁用的UISlider替换,而不必担心MPVolumeView滑块和UISlider之间的对齐问题。
AVPlayer拥有volume属性,但是它的文档说:
使用此属性可相对于其他音频输出控制播放机的音频音量。
AVAudioSession拥有只读outputVolume属性,其文档中写道:
系统宽的输出卷只能由用户直接设置;要在应用程序中提供卷控制,请使用MPVolumeView类。
对于这些限制,简单的解决方案(或解决办法)只是将文本颜色设置为清除。
https://stackoverflow.com/questions/2829247
复制相似问题