2010-10-02 7 views
5

¿Hay alguna manera de evitar que se muestre el formulario de visualización del indicador de volumen si presiona los botones de subir/bajar el volumen del hardware?iPhone SDK - ¿Cómo deshabilitar la vista del indicador de volumen si se presionan los botones de hardware?

Se necesita solo para una aplicación de demostración. Por lo tanto, no es necesario que el método sea seguro en la tienda de aplicaciones.

+1

Es posible que desee aceptar algunas respuestas a sus otras preguntas antes de que la gente responda a esta. –

Respuesta

2

IIRC, la presencia de un MPVolumeView inhibe la visualización de la superposición del indicador de volumen. Intente pegarlo en la vista relevante y ver si este es el caso.

A continuación, puede probar varios trucos para que sea efectivamente invisibles:

  • Que sea oculto (o hacer una supervista oculto).
  • Establezca su alfa (o el alfa de una supervista) en 0, o 0.01, más o menos.
  • Move que fuera de la pantalla
  • movimiento casi fuera de la pantalla (por ejemplo, de modo que sólo el píxel superior izquierdo está en la pantalla)
  • pegarlo bajo otro punto de vista.
  • Colóquelo en una subvista con clipsToBounds = ON, y muévalo fuera de esos límites
  • Establezca volumeView.layer.mask en un CALayer nuevo (por lo tanto totalmente transparente). Establecer volumeView.userInteractionEnabled = NO.

Todos estos son teóricamente detectables por MPVolumeView, pero sospecho que algunos de ellos funcionarán.

+0

Puede confirmar esto. Un MPVolumeView debe estar visible (Apple parece comprobar esto realmente), y luego no se muestra la superposición de volumen. La solución más fácil parece ser mover el MPVolumeView fuera de la pantalla (por ejemplo, -1000, -1000). – DarkDust

4

funciona así:

  • reproducir un archivo en silencio
  • añadir un volumen Ver a su vista principal
  • enviar el fin de respaldar

por ejemplo

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

Usted señor, es un genio. ¡Gracias esto funciona! – 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 
    } 
} 
Cuestiones relacionadas