2011-02-06 9 views
6

sto replicare un MPMediaPlayerView utilizzando AVPlayer così posso aggiungere alcune funzionalità ad esso. Ho creato un UIView con play/pausa e io lo mostro su un touch e quindi impostare un timer per nasconderlo come per il codice di esempio HeadsUpUI. Ho aggiunto un MPVolumeView ad esso per regolare il volume.Rilevamento tocchi in MPVolumeView

Questo funziona correttamente, tranne che se si sta facendo scorrere il volume, la mia vista genitore non ha idea che si stia ancora interagendo con una sottoview e si nasconda quando scatta il timer. Quindi stai ancora regolando il volume, ma il cursore non è più lì.

Quello che mi piace idealmente sapere è se il tocco è terminato sulla vista e tutti subviews. C'è un modo per fare questo?

L'unica soluzione a cui riesco a pensare è quella di visualizzare le visualizzazioni secondarie di MPVolumeView e quando trovo il dispositivo di scorrimento, osservare la proprietà di rilevamento per sapere quando è stato eseguito il rilevamento. Ma ciò non impedisce a qualcuno di tenere premuto su un pulsante per un lungo periodo. Mi piacerebbe davvero trovare una soluzione generale a questo.

TIA

risposta

7

Aggiungi un riconoscitore gesto al MPVolumeView. Avere il gesto riconoscitore chiamare un metodo nella vista che azzera il timer.

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

E per il pre 3.2? Estendere MPVolumeView e l'attuazione di tocco * eventi non sembra funzionare. qualche idea? – Ephraim

+0

Questa grande opera. Grazie. Non dimenticare "cancelsTouchesInView" –