Используйте AudioServices для прослушивания громкости оборудования. Когда громкость упадет до нуля, установите альфа MPVolumeSlider на ноль и поместите свой собственный отключенный UISlider в ту же позицию. Сделайте скин своего слайдера, чтобы он выглядел как слайдер громкости.
AudioSessionAddPropertyListener( kAudioSessionProperty_CurrentHardwareOutputVolume , ... );
kAudioSessionProperty_AudioRouteChanged
также может быть полезным.
Если вы идете по иерархии представления под MPVolumeView, вы должны найти UISlider. Если нет или если он скрыт, вы знаете, что строка отключения звука.
Edit:
Этот описывает прототип функции для вашего слушателя. Чтобы передать сообщение экземпляру вашего класса, выполните что-то похожее на:
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 );