2012-06-27 27 views
7

Sto costruendo un'applicazione che necessita di un MPVolumeView per controllare il volume. Ha funzionato perfettamente prima di iOS 5.1 ma dal momento che l'aggiornamento 5.1 l'immagine del pollice non è più centrata verticalmente. Ho provato alcune cose come cambiare le dimensioni delle immagini, ridimensionare le mie viste (e il cursore) ma niente sembra funzionare, il pollice non è più centrato verticalmente. L'unico modo in cui ottengo un pollice centrato è se utilizzo il predefinito iOS.Immagine personalizzata MPVolumeView Thumb non centrata verticalmente da iOS 5.1

Ho provato ad aggiungere un UISlider a un'altra vista con l'immagine esatta min, max e pollice e quella è centrata correttamente.

Ecco il codice per il MPVolumeView:

MPVolumeView *volumeView; 
volumeView = [[[MPVolumeView alloc] initWithFrame:volumeViewHolder.bounds] autorelease]; 
[volumeViewHolder addSubview:volumeView]; 

UIView *volumeViewSlider; 
for (UIView *view in [volumeView subviews]) 
{ 
    if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) 
    { 
     volumeViewSlider = view; 
    } 
} 

[(UISlider *)volumeViewSlider setThumbImage:sliderHandleIcon forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMinimumTrackImage:leftTrackImage forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMaximumTrackImage:rightTrackImage forState:UIControlStateNormal]; 

volumeViewHolder è solo un UIView questo è 153x33. Ho messo il pollice in verde nello screenshot. enter image description here

+0

Ho avuto lo stesso problema, [Daniel Amitay] (http://stackoverflow.com/users/314042/daniel-amitay) mi ha indicato la soluzione: http://tibr.me/2012/07/14/ personalizzazione-mpvolumeview-appearance/ – murze

+0

Questa non è una grande soluzione in quanto sostituisce l'implementazione MPVolumeSlider per tutti MPVolumeSlider. Ciò provoca un offset nel dispositivo di scorrimento MPMoviePlayerViewController che usiamo per riprodurre altri media. –

+0

@murze: Questo è un trucco se mai ne ho visto uno! È accettato da Apple? – Nailer

risposta

4

Forse una soluzione migliore:

utente un'immagine più grande con un bordo trasparente sul fondo. Dovrebbe essere intorno a 10px per i display Retina.

+0

Ha funzionato come un fascino! –

0

lo stesso problema risolto in un progetto. Deve essere impostato il colore della parte sinistra e della parte destra con alpha = 0 -it significa trasparente tutto il cursore senza pollice (senza parte moovable di esso). Dopo dobbiamo creare una vista personalizzata per la linea di scorrimento, senza pollice. In questa vista, qualsiasi parte colorata può essere spostata come desiderato, in alto o in basso, a sinistra oa destra. Ottenuto utilizzando la y definita per la vostra occasione:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(x,y,width, height)]; 

E aggiungere il cursore a questa riga come sottoview. La visualizzazione risultante sarà il cursore. Per esempio:

UISlider *ourSlider = ...; 
//initialise UISlider 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

UIView *lineOfSliderWithoutThumb = ... ; 
// creation it 

[lineOfSliderWithoutThumb addSubview:ourSlider]; 

// dopo questo lineOfSliderWithoutThumb è il nostro uislider personalizzato. Nota: i colori vengono utilizzati come colori di scorrimento predefiniti dei lati sinistro e destro di UISlider.

+0

anche per iOS 8 e iOS 7 – akr