2011-02-06 18 views
6

Estoy replicando un MPMediaPlayerView usando AVPlayer para poder agregarle algunas funcionalidades. He creado un UIView con play/pause y lo visualizo con un toque y luego configuro un temporizador para ocultarlo según el código de muestra HeadsUpUI. Le agregué un MPVolumeView para ajustar el volumen.Detectando toques en MPVolumeView

Eso funciona bien, excepto que si está deslizando el volumen, mi vista principal no tiene idea de que todavía está interactuando con una subvista y se oculta cuando el temporizador se dispara. Así que todavía estás ajustando el volumen, pero el control deslizante ya no está allí.

Lo que idealmente me gustaría saber es cuando el toque ha finalizado en la vista y en todas las subvistas. ¿Hay alguna forma de hacer esto?

La única solución que se me ocurre es recorrer las subvistas de MPVolumeView y cuando encuentre el control deslizante, observe la propiedad de seguimiento para saber cuándo se ha realizado el seguimiento. Pero eso no ayuda a que alguien mantenga presionando un botón durante mucho tiempo. Realmente me gustaría encontrar una solución general para esto.

TIA

Respuesta

7

Añadir un reconocedor de trazos hasta la MPVolumeView. Haga que el reconocedor de gestos invoque un método en su vista que restablezca el temporizador.

MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(0, 88, 320, 30)]; 
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(volumeAdjusted:)]; 
recognizer.cancelsTouchesInView = NO;  // this line is VERY important 
[volumeView addGestureRecognizer:recognizer]; 
[self.view addSubview:volumeView]; 
[volumeView release]; 

-(void)volumeAdjusted:(UIGestureRecognizer *)recognizer { 
    // reset timer 
} 
+0

¿Qué tal para for 3.2? La extensión de MPVolumeView y la implementación de eventos touch * no parece funcionar. ¿Alguna idea? – Ephraim

+0

Esto funciona genial. Gracias. No te olvides de 'cancelsTouchesInView' –