3

を含むプロジェクトがありMPVolumeViewます。それはセットアップされ、機能します。唯一のことは、デバイスをミュートすると、"No Volume Available"代わりにテキストが表示されることですMPVolumeViewMPVolumeViewデバイスがミュートされているときは、スライダーを無効にしたいと思います。

volumeView はvolumeBounds、そのビューの境界を使用して、ビューで初期化されます。

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:volumeBounds.bounds] autorelease];
[volumeBounds addSubview:volumeView]; 
[volumeView sizeToFit];

ありがとう :)

何か他のことで私を助けることに興味がある場合は、この質問をチェックしてください

4

2 に答える 2

3

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 );
于 2010-05-22T04:49:49.073 に答える