AudioServicesを使用して、ハードウェア ボリュームをリッスンします。ボリュームがゼロになったら、MPVolumeSlider のアルファをゼロに設定し、独自の無効な 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 );