首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPVolumeView,避免显示“无卷可用”

MPVolumeView,避免显示“无卷可用”
EN

Stack Overflow用户
提问于 2010-05-13 18:21:35
回答 2查看 5K关注 0票数 3

我有一个带有MPVolumeView的项目。它是设置好的,它可以工作,唯一的问题是,当我静音设备时,文本"No Volume Available"会出现而不是MPVolumeView。当设备静音时,我更希望MPVolumeView的滑块被禁用。

volumeView是在视图volumeBounds中初始化的,具有该视图的边界。

代码语言:javascript
复制
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:volumeBounds.bounds] autorelease];
[volumeBounds addSubview:volumeView]; 
[volumeView sizeToFit];

谢谢:)

如果您有兴趣帮助我做其他的事情,请查看https://stackoverflow.com/questions/2829234/mpvolumeview-in-a-uialertview

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-22 04:49:49

使用AudioServices侦听硬件卷。当卷变为零时,将MPVolumeSlider的alpha设置为零,并将您自己的禁用UISlider放在相同的位置。剥皮你的滑块看起来像音量滑块。

代码语言:javascript
复制
AudioSessionAddPropertyListener( kAudioSessionProperty_CurrentHardwareOutputVolume , ... );

kAudioSessionProperty_AudioRouteChanged也可能是有用的。

如果您在MPVolumeView下遍历视图层次结构,您应该会找到一个UISlider。如果没有,或者它是隐藏的,您知道静音字符串正在显示。

编辑:

描述了侦听器的函数原型。若要将消息传递给类的实例,请执行类似的操作:

代码语言:javascript
复制
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 );
票数 3
EN

Stack Overflow用户

发布于 2015-03-03 08:18:18

最后,为了简单起见,我得到了这个解决方案。

在目标C中:

代码语言:javascript
复制
[UILabel appearanceWhenContainedIn: [MPVolumeView class], nil].textColor = [UIColor clearColor];

在Swift:

代码语言:javascript
复制
UILabel.appearanceWhenContainedWithin([MPVolumeView.self]).textColor = UIColor.clearColor()

关于appearanceWhenContainedWithin方法,请参考以下答案:Swift中的appearanceWhenContainedIn

它只是隐藏“无卷可用”文本,而不是用禁用的UISlider替换,而不必担心MPVolumeView滑块和UISlider之间的对齐问题。

AVPlayer拥有volume属性,但是它的文档说:

使用此属性可相对于其他音频输出控制播放机的音频音量。

AVAudioSession拥有只读outputVolume属性,其文档中写道:

系统宽的输出卷只能由用户直接设置;要在应用程序中提供卷控制,请使用MPVolumeView类。

对于这些限制,简单的解决方案(或解决办法)只是将文本颜色设置为清除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2829247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档