2011-10-23 9 views
13

Sto utilizzando un'applicazione MusicMlayer e quando provo a modificare il volume viene visualizzata la notifica visiva, come mostrato nell'immagine. Ecco il codice che sto usando:applicationMusicPlayer notifica volume

[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolune]; 

Qualcuno sa come nascondere questa notifica?

enter image description here

risposta

26

non so dove la documentazione dice così, ma se si aggiunge una vista MPVolumeView per la vostra applicazione la sovrapposizione volume del sistema va via. Anche se non è visibile:

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

È possibile utilizzare i tasti del volume dell'hardware, il metodo setVolume o direttamente interagire con il controllo (se visibile) che la sovrapposizione non si presenta.

+5

ho avuto un problema w con questo l'icona di AirPlay, anche in un CGRectZero, che non è successo durante i test perché non c'erano dispositivi AirPlay sulla nostra rete wifi. È necessario impostare volumeView.showsRouteButton = NO; –

+0

@AshFurrow, madmw, Quando ho provato ad accedere al codice sopra nella mia app, mi mostrava errori come "Uso dell'oggetto non definito volumeView". Come sistemarlo? Qualsiasi file di intestazione o framework richiesto? – Hemang

+0

@Hemang cerca MPVolumeView nel documento, vedrai che fa parte di MediaPlayer.framework Ripeti finché non si lamenta il compilatore. – djromero

0

Ho avuto successo con questo in iOS 6. Anche se non avrebbe funzionato bene. Ha causato un po 'di ritardo quando si fa scorrere il thumbImage. Dovevo prendere le ultime 2 righe di codice per farlo funzionare.

[volumeView release]; 
    ... 
4

Per iOS6 ho dovuto impostare un'immagine con alfa 0 e diverso da zero dimensioni ai campi di immagine 's il MPVolumeView al fine di ottenere la notifica di default variazione di volume a scomparire.

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

Ciò ha reso il MPVolumeView essere "visibile" sullo schermo, ma invisibile per l'utente.

+0

Mi piacerebbe molto farlo funzionare in iOS 6.1.4 insieme a mpmusicplayercontroller setvolume Sto solo provando a impostare il volume della mia app su uno stato sul mio viewcontroller iniziale, ma nascondere l'overlay del volume del sistema quando si verifica il volume del set ... devo inserire il codice qui sotto da qualche altra parte? – snownskate

+0

modifica: inserisco il codice sopra in viewDidLoad, sto mettendo il volumevolume MPMusicPlayerController in super viewDidLoad. – snownskate

+0

Ho ottenuto questo risultato inserendo il codice sopra nel mio VC iniziale, e poi eseguendo il volume del set su VC successivi. Sicuramente non l'approccio desiderabile, e non sono sicuro se questo è il modo in cui gli altri hanno funzionato, ma il setup funziona correttamente con il layout dell'app per ora. – snownskate

0

Per me, su iOS 7, nessuna delle soluzioni precedenti ha funzionato. Ecco come ho fatto:

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

Cioè, è sufficiente impostare cornice di MPVolumeView in un percorso off-screen, come (-100, -100).

+0

no non funziona per me :( –

+0

non ha funzionato neanche per me. L'ho provato con il caricamento pigro e con sé. nel metodo init. non si avvicinava :( –

+0

non funziona neanche per me. – piaChai

2

Ho riscontrato lo stesso problema di recente. Invece di aggiungere il MPVolumeView alla vista corrente di controller della vista, lo aggiungo alla finestra dell'applicazione una volta all'inizio del app:

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

Questo funziona sia in iOS 7 e 8.

+0

Grazie, ha funzionato per me. Non sono sicuro del motivo per cui Apple ha deciso di cambiarlo per iOS 8. – Ashley

0

Swift 3

È possibile nascondere il sistema MPVolumeView utilizzando

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