2011-10-23 30 views
13

私はapplicationMusicPlayerを使用しています。音量を変更しようとすると、図のように視覚的な通知が表示されます。 ここで私が使用していますコード:applicationMusicPlayer音量通知

[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolune]; 

誰もがこの通知を非表示にする方法を知っていますか?

enter image description here

答えて

26

ドキュメントがそう言うところ私は知りませんが、あなたが自分のアプリにMPVolumeViewビューを追加する場合、システムボリュームオーバーレイが消えます。それが表示されていない場合でも:

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame: CGRectZero]; 
    [self.view addSubview: volumeView]; 
    [volumeView release]; 
    ... 
} 

あなたは、ハードウェアの音量ボタン、setVolumeメソッドを使用するか、直接オーバーレイが表示されないこと(表示されている場合)コントロールと対話することができます。

+5

を使用して、システムMPVolumeViewを非表示にすることができます

私は問題wを持っていましたこれは私たちのWiFiネットワークにAirPlayデバイスがなかったため、テスト中には発生しなかったCGRectZeroのAirPlayアイコンを示しています。 volumeView.showsRouteButton = NOを設定する必要があります。 –

+0

@AshFurrow、madmw、私は私のアプリケーションで上記のコードにアクセスしようとしたとき、私は '不明なオブジェクトvolumeViewの使用 'のようなエラーを表示します。それを修正するには?必要なヘッダファイルやフレームワークはありますか? – Hemang

+0

@HemangでMPVolumeViewを検索すると、MediaPlayer.frameworkの一部になります。コンパイラが不平を言うまで繰り返します。 – djromero

0

これはiOS 6で成功しましたが、うまく機能しませんでした。 thumbImageをスライドさせるとかなり遅れが生じました。これを行うには、コードの最後の2行を取り出しなければなりませんでした。 iOS6のために

[volumeView release]; 
    ... 
4

私が消えるためのデフォルトのボリュームの変更通知を得るためにMPVolumeViewの画像フィールドにアルファ0と非ゼロのサイズで画像を設定する必要がありました。

// hide the hardware volume slider 
UIImage *thumb = [[UIImage alloc] initWithCIImage:[UIImage imageNamed:@"volumeHider"].CIImage scale:0.0 orientation:UIImageOrientationUp]; 
MPVolumeView *hwVolume = [[MPVolumeView alloc] initWithFrame:self.frame]; 
[hwVolume setUserInteractionEnabled:NO]; 
hwVolume.showsRouteButton = NO; 
[hwVolume setVolumeThumbImage:thumb forState:UIControlStateNormal]; 
[hwVolume setMinimumVolumeSliderImage:thumb forState:UIControlStateNormal]; 
[hwVolume setMaximumVolumeSliderImage:thumb forState:UIControlStateNormal]; 
[self addSubview:hwVolume]; 

これはMPVolumeViewは、画面上の「目に見える」が、ユーザーには見えないことが行わ。

+0

私は、私の最初のviewcontrollerの状態に自分のアプリケーションのボリュームを設定しようとしているだけで、iOS 6.1.4のmpmusicplayercontroller setvolumeと一緒にこれを動作させる時間を、 setvolumeが発生したときにシステムボリュームオーバーレイを非表示にするにはどうすればいいですか? – snownskate

+0

edit:私はあなたのコードをviewDidLoadに入れていますが、私はsuper viewDidLoadにMPMusicPlayerController setvolumeを入れています – snownskate

+0

これは私の最初のVCに上記のコードを入れて、その後のVCのsetvolumeを実行することによって得られました。望ましいアプローチではなく、それが他の人の作業方法であるかどうかは分かりませんが、 – snownskate

0

私にとっては、iOS 7では上記の解決策のどれもうまくいきませんでした。ここでは、私はそれをやった方法です:

、単純な(-100、-100)とオフスクリーンの場所にMPVolumeViewのフレームに設定されている
_volume = [[MPVolumeView alloc] initWithFrame: CGRectMake(-100,-100,16,16)]; 
_volume.showsRouteButton = NO; 
_volume.userInteractionEnabled = NO; 
[self.view addSubview:_volume]; 
[_volume release]; 

+0

私のために働いていないいいえ:( –

+0

私のために働いていませんでした。私は怠惰なローディングと自分でinitメソッドで試しました。もう近づくことはなかった:( –

+0

私のために働いていない。 – piaChai

2

最近同じ問題が発生しました。代わりに、現在のView ControllerのビューにMPVolumeViewを追加するので、私はアプリの起動時に一度、アプリケーションのウィンドウに追加:

CGRect rect = CGRectMake(-500, -500, 0, 0); 
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:rect]; 
[self.window addSubview:volumeView]; 

これは、両方のiOSで7と8

+0

ありがとう、私のために働いた。なぜAppleがiOS 8のためにそれを変更することを決めたのか分からない。 – Ashley

0

スウィフト3作品あなたは

override func viewDidLoad() { 
    super.viewDidLoad() 
    let volumeView = MPVolumeView(frame: CGRect.zero) 
    self.view.addSubview(volumeView) 
    }