我的项目中包含MPVolumeView
。它已设置,并且有效,唯一的一点是,当我将设备静音时,文本"No Volume Available"
会出现,而不是MPVolumeView
。我希望在设备静音时禁用MPVolumeView
的滑块。
在视图volumeBounds
中初始化volumeView,并使用该视图的边界。
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:volumeBounds.bounds] autorelease];
[volumeBounds addSubview:volumeView];
[volumeView sizeToFit];
谢谢:)
如果您有兴趣帮助我做其他事情,请查看this question
答案 0 :(得分:3)
使用AudioServices侦听硬件卷。当音量变为零时,将MPVolumeSlider的alpha设置为零,并将您自己的禁用UISlider置于相同位置。使滑块皮肤看起来像音量滑块。
AudioSessionAddPropertyListener( kAudioSessionProperty_CurrentHardwareOutputVolume , ... );
kAudioSessionProperty_AudioRouteChanged
也可能有用。
如果您在MPVolumeView下运行视图层次结构,您应该找到一个UISlider。如果没有,或者它是隐藏的,你知道静音字符串正在显示。
编辑:
This描述了监听器的函数原型。要将消息传递给类的实例,请执行以下操作:
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 );
答案 1 :(得分:1)
为了简单起见,我最终得到了这个解决方案。
在Objective-C中:
[UILabel appearanceWhenContainedIn: [MPVolumeView class], nil].textColor = [UIColor clearColor];
在斯威夫特:
UILabel.appearanceWhenContainedWithin([MPVolumeView.self]).textColor = UIColor.clearColor()
请参阅以下appearanceWhenContainedWithin
方法的答案:
appearanceWhenContainedIn in Swift
它只隐藏“No Volume Available”文本,而不是替换为禁用的UISlider而不用担心MPVolumeView滑块和UISlider之间的对齐。
AVPlayer具有volume
属性,但其文档显示:
使用此属性控制播放器相对于其他音频输出的音量。
AVAudioSession具有只读outputVolume
属性,其文档显示:
系统范围的输出量只能由用户直接设置;要在您的应用程序中提供音量控制,请使用MPVolumeView类。
对于限制,简单的解决方案(或解决方法)只是将文本颜色设置为清除。