2011-10-23 2 views
13

J'utilise un applicationMusicPlayer et quand j'essaie de changer le volume apparaissent la notification visuelle, comme indiqué dans l'image. Voici le code J'utilise:applicationMusicPlayer notification de volume

[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolune]; 

Tout le monde sait comment cacher cette notification?

enter image description here

Répondre

26

Je ne sais pas où les médecins le dit, mais si vous ajoutez une vue MPVolumeView à votre application de la couche de volume du système va. Même si ce n'est pas visible:

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

Vous pouvez utiliser les boutons de volume du matériel, la méthode setVolume ou d'interagir directement avec le contrôle (si elle est visible) que la superposition ne se présente pas.

+5

J'ai eu un problème w Cela montre l'icône AirPlay, même dans un CGRectZero, ce qui ne s'est pas produit pendant les tests car il n'y avait pas d'appareils AirPlay sur notre réseau wifi. Vous devez définir volumeView.showsRouteButton = NO; –

+0

@AshFurrow, madmw, Lorsque j'ai essayé d'accéder au code ci-dessus dans mon application, il me montre erreur comme «Utilisation de l'objet indéfini volumeView». Comment le réparer? Tout fichier d'en-tête ou cadre requis? – Hemang

+0

@Hemang recherche MPVolumeView dans le document, vous verrez qu'il fait partie de MediaPlayer.framework Répétez jusqu'à ce qu'il n'y ait pas de compilateur se plaint. – djromero

0

J'ai eu du succès avec iOS 6. Bien que cela ne fonctionnerait pas bien. Cela a causé beaucoup de retard en faisant glisser le thumbImage. J'ai dû enlever les 2 dernières lignes de code pour que cela fonctionne.

[volumeView release]; 
    ... 
4

Pour iOS6 j'ai dû définir une image avec alpha 0 et la taille non nulle dans les champs de l'image de MPVolumeView afin d'obtenir la notification de changement de volume par défaut à disparaître.

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

Cela fait le MPVolumeView être "visible" sur l'écran, mais invisible pour l'utilisateur.

+0

Je vais avoir du mal à faire fonctionner cela dans iOS 6.1.4 avec mpmusicplayercontroller setvolume.J'essaie juste de mettre le volume de mon application à un état sur mon viewcontroller initial, mais cachez la superposition de volume système quand le setvolume se produit ... dois-je mettre le code ci-dessous quelque part d'autre? – snownskate

+0

edit: Je mets votre code ci-dessus dans viewDidLoad, je mets le volume set MPMusicPlayerController dans super viewDidLoad – snownskate

+0

J'ai travaillé en mettant le code ci-dessus dans mon VC initial, puis en effectuant le setvolume sur les VC suivants: Certainement pas l'approche désirable, et je ne sais pas si c'est comme ça que les autres ont fonctionné, mais la configuration fonctionne avec mon application. pour l'instant – snownskate

0

Pour moi, sur iOS 7, aucune des solutions ci-dessus n'a fonctionné. Voici comment je l'ai fait:

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

qui est, tout simplement de définir le cadre de MPVolumeView à un emplacement hors écran tel que (-100, -100).

+0

non ne fonctionne pas pour moi :( –

+0

ne fonctionne pas pour moi non plus.Je l'ai essayé avec chargement paresseux et avec soi dans la méthode init. ne s'est pas rapproché :( –

+0

ne fonctionne pas pour moi non plus. – piaChai

2

J'ai récemment rencontré le même problème. Au lieu d'ajouter le MPVolumeView à la vue de la vue actuelle contrôleur, je l'ajoute à la fenêtre de l'application une fois au début de l'application:

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

Cela fonctionne dans les deux iOS 7 et 8.

+0

Merci, a travaillé pour moi. Je ne sais pas pourquoi Apple a décidé de changer cela pour iOS 8. – Ashley

0

Swift 3

Vous pouvez cacher le système MPVolumeView utilisant

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