2011-10-23 108 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這顯示了AirPlay圖標,即使在CGRectZero中,由於我們的無線網絡上沒有AirPlay設備,所以在測試過程中沒有發生這種情況。你需要設置volumeView.showsRouteButton = NO; –

+0

@AshFurrow,madmw,當我嘗試在我的應用程序中訪問上面的代碼時,它向我展示錯誤,如'使用未定義的對象volumeView'。如何解決它?任何需要的頭文件或框架? – Hemang

+0

@Hemang在文檔中搜索MPVolumeView,你會看到它是MediaPlayer.framework的一部分直到沒有編譯器抱怨爲止。 – djromero

0

我在iOS 6中取得了成功,雖然效果不佳。滑動thumbImage時會導致相當多的延遲。我必須拿出最後2行代碼才能工作。

[volumeView release]; 
    ... 
4

對於iOS6的我不得不爲了得到默認音量改變通知消失用α0和非零尺寸與MPVolumeView的圖像場以設置的圖像。

// 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

我有一個時間讓這個工作在iOS 6.1.4以及mpmusicplayercontroller setvolume。我只是試圖將我的應用程序的音量設置爲我的初始viewcontroller狀態,但當setvolume發生時隱藏系統音量覆蓋...我是否需要把代碼放在其他地方? – snownskate

+0

編輯:我把你的代碼放在viewDidLoad中,我把MPMusicPlayerController的setvolume放在超級viewDidLoad中。 – snownskate

+0

通過將上面的代碼放在我的初始VC中,然後在隨後的VC上執行setvolume來實現這個工作。絕對不是可取的方法,並且不確定這是其他人如何工作的方式,但安裝恰好適用於我的應用程序佈局 – snownskate

0

對於我而言,在iOS 7上,以上解決方案都不起作用。這是我如何做的:

_volume = [[MPVolumeView alloc] initWithFrame: CGRectMake(-100,-100,16,16)]; 
_volume.showsRouteButton = NO; 
_volume.userInteractionEnabled = NO; 
[self.view addSubview:_volume]; 
[_volume release]; 

也就是說,只要設定MPVolumeView的框架屏幕外的位置,如(-100,-100)。

+0

不對我工作:( –

+0

沒有爲我工作,我試着用惰性加載和自我。在init方法。我沒有接近:( –

+0

也不適合我。 – piaChai

2

我最近遇到同樣的問題。

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

這個工作在兩個iOS的7和8

+0

謝謝,爲我工作。不知道爲什麼蘋果決定改變iOS 8。 – Ashley

0

斯威夫特3:而不是添加MPVolumeView當前視圖控制器的看法,我在應用的開始將其添加到應用程序的窗口一次

您可以隱藏使用

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