2010-10-02 4 views

risposta

2

IIRC, la presenza di un MPVolumeView inibisce la visualizzazione dell'indicatore del volume sovrapposto. Prova ad attaccare la vista pertinente e vedere se questo è il caso.

Allora si può provare diversi accorgimenti per rendere più efficace invisibile:

  • Make it nascosto (o fare un superview nascosto).
  • Imposta l'alfa (o l'alfa di una superview) su 0 o su 0,01 o giù di lì.
  • movimento che off-schermo
  • movimento quasi fuori schermo (per esempio soltanto il pixel in alto a sinistra sullo schermo)
  • incollarla sotto un'altra vista.
  • bastone in una visualizzazione secondaria con clipsToBounds = ON, e spostarlo fuori di questi limiti
  • Set volumeView.layer.mask in un (quindi completamente trasparente) CALayer. Imposta volumeView.userInteractionEnabled = NO.

Tutti questi sono teoricamente rilevabili da MPVolumeView, ma ho il sospetto che alcuni di essi funzioneranno.

+0

Può confermare questo. Un MPVolumeView deve essere visibile (Apple sembra davvero controllare questo), quindi la sovrapposizione del volume non viene mostrata. La soluzione più semplice sembra essere quella di spostare MPVolumeView dallo schermo (ad esempio -1000, -1000). – DarkDust

4

E funziona così:

  • riprodurre un file silenziosa
  • aggiungere un volume di vista alla visualizzazione principale
  • inviare il fine di eseguire il

esempio

NSString *url = [[NSBundle mainBundle] 
         pathForResource:@"silent" ofType:@"mp3"]; 
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] 
         initWithContentURL:[NSURL URLWithString:url]]; 
[moviePlayer play]; 

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame: 
         CGRectMake(0, 0, 1, 1)] autorelease]; 
[self.view addSubview:volumeView]; 
[self.view sendSubviewToBack:volumeView]; 
+0

Lei signore, è un genio. Grazie a questo funziona! – GeneCode

1
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //get current volume level 
    oldVolume= [[MPMusicPlayerController applicationMusicPlayer] volume]; 

    //hide volume indicator   
    MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame: 
          CGRectMake(0, 0, 1, 1)] autorelease]; 

    musicController=[MPMusicPlayerController applicationMusicPlayer]; 
    [self.view addSubview:volumeView]; 
    [self.view sendSubviewToBack:volumeView]; 
    [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(volume) userInfo:nil repeats:YES]; 
} 

- (void)volume 
{ 
    if ([musicController volume]>oldVolume || [musicController volume]<oldVolume) { 
    [musicController setVolume:oldVolume]; 
    // do some stuff here and the volume level never changes, just like volume action in camera app 
    } 
}