2012-06-27 10 views
7

Estoy construyendo una aplicación que necesita un MPVolumeView para controlar el volumen. Funcionó perfectamente antes de iOS 5.1, pero desde la actualización 5.1, la imagen de pulgar ya no está centrada verticalmente. Intenté algunas cosas como cambiar las dimensiones de la imagen, cambiar el tamaño de mis vistas (y del control deslizante), pero parece que nada funciona, el pulgar ya no está verticalmente centrado. La única forma de obtener un pulgar centrado es si uso el iOS predeterminado.Personalizado MPVolumeView Thumb Image no centrado verticalmente desde iOS 5.1

Intenté agregar un UISlider a otra vista con el min exacto, el máximo y la imagen del pulgar y ese se centra bien.

Aquí está el código para el 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 es sólo un UIView eso es 153x33. Pongo el dedo pulgar en verde en la captura de pantalla. enter image description here

+0

Tuve el mismo problema, [Daniel Amitay] (http://stackoverflow.com/users/314042/daniel-amitay) me indicó la solución: http://tibr.me/2012/07/14/ customizing-mpvolumeview-appearance/ – murze

+0

No es una gran solución ya que reemplaza la implementación de MPVolumeSlider para todos los MPVolumeSlider. Esto provoca un desplazamiento en el control deslizante MPMoviePlayerViewController que usamos para reproducir otros medios. –

+0

@murze: ¡Es un truco si alguna vez lo veo! ¿Es esto aceptado por Apple? – Nailer

Respuesta

4

Tal vez una mejor solución:

usuario una imagen más grande con un borde transparente en la parte inferior. Debe ser de alrededor de 10 px para Retina Displays.

+0

¡Funcionó como un encanto! –

0

el mismo problema que resolví en un proyecto. Debe establecerse el color de la parte izquierda y la parte derecha con alpha = 0, significa transparente todo el deslizador sin pulgar (sin parte moovable). Después debemos crear una vista personalizada para la línea del control deslizante, sin pulgar. En esta vista, cualquier parte coloreada se puede desplazar como desee, superior o inferior, izquierda o derecha. Obtuvo el uso de la y definida para su ocasión:

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

Y agregue el control deslizante a esta línea como subvista. La vista resuelta será un deslizador. Por ejemplo:

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]; 

// después de este lineOfSliderWithoutThumb es la nuestra uislider personalizado. Nota: los colores que se utilizan son los colores deslizantes predeterminados de los lados izquierdo y derecho de UISlider.

+0

es para iOS 8 y iOS 7 también – akr

Cuestiones relacionadas