2010-11-11 12 views
19

Estoy tratando de emular la función "Desbloquear para desbloquear" de Apple en mi aplicación. Llego a este punto (imagen a continuación), pero como pueden ver, la "pista" del UISlider está visible y está cubriendo mi texto. ¿Hay alguna manera de cambiar un atributo programáticamente que hará que la "pista" sea invisible?¿Cómo hacer invisible la "pista" de UISlider?

alt text

Por favor, hágamelo saber si usted necesita alguno de mi código.

¡Gracias de antemano!

EDITAR: Si cambio el control deslizante alfa a 0, se deshace de mi botón deslizante, por lo que no funcionará a menos que lo esté haciendo mal. :)

+0

Va en contra de Human Interface Guidelines de Apple para reproducir la diapositiva para desbloquear la interfaz de usuario. –

+0

@JackLawrence proof? – aqua

Respuesta

25

En realidad, me acabo de dar cuenta. Esto es lo que hice:

UIImage *sliderMinimum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0]; 
[slider setMinimumTrackImage:sliderMinimum forState:UIControlStateNormal]; 
UIImage *sliderMaximum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0]; 
[slider setMaximumTrackImage:sliderMaximum forState:UIControlStateNormal]; 

clearTrack.png es sólo una imagen clara deslizador hice.

Ahora tengo esto: ¡yay! alt text

+0

Gracias por cierto, nunca pensé en este método. Es mucho más simple y más rápido que los otros métodos – cgossain

+0

Solución maravillosamente simple para este problema. –

+0

Ni siquiera necesita proporcionar un archivo de imagen; consulte otras respuestas. – clearlight

6

Probablemente no haya una manera de ocultar la pista; la "diapositiva para desbloquear" no se comporta como un UISlider y probablemente sea un control personalizado. Usted podría ser capaz de hackear el control deslizante, tal vez estableciendo la opacidad baja (0 lo ocultará y no recibirá los toques), pero si sigue esa ruta probablemente tendrá algo roto después de una actualización del sistema operativo. Apple no se desvive por la compatibilidad como lo hace Microsoft.

La forma correcta de hacerlo es con un control personalizado. Puede parecer más trabajo que usar un UISlider, pero no es así si lo comparas con todo el tiempo que has gastado y/o pasarás pirateando un UISlider.

Para hacerlo: subclase UIControl. Escribe tu propio código de dibujo para que se vea bien (probablemente puedas reutilizar algo de lo que sea que estés haciendo ahora). Entonces registrarse para eventos de toque para mover el mango deslizante:

  • UIControlEventTouchDown: si está en el mango, establecer un "movimiento" bandera
  • UIControlEventTouchDragInside: si se establece el indicador en movimiento, mover la palanca a la posición de contacto ; simplemente puede actualizar una variable de instancia, llame a setNeedsDisplay para dibujarla en la nueva posición.
  • UIControlEventTouchUpInside: si se establece la bandera en movimiento, y el mango está en el extremo, desbloquear

Si quiere imitar el mango de desbloqueo real, jugar con él y ver cómo se comporta. Es posible que deba responder a los eventos de forma diferente (lo que sucede si arrastra fuera de la ruta del control deslizante). Pero deberías ser capaz de entenderlo.

+0

Excelente respuesta, intentaré cambiar la opacidad a una configuración baja, y si eso no funciona, tendré que tratar de controlar por mi cuenta. ¡Gracias por la respuesta! –

+0

Aunque también respondí, esta es la respuesta correcta. – Justin

3

En respuesta a la pregunta planteada, puede establecer un png transparente de 1px para las imágenes de pista mínima y máxima.

+0

Ese es exactamente el problema, como puede ver en mi respuesta anterior. –

+0

No debe haber visto mi respuesta a tiempo. Por favor, deje seleccionada la respuesta de Benzado. Ese enfoque es correcto para lo que estás tratando de lograr. – Justin

26

aquí es una manera aún más fácil.No hay necesidad de crear imágenes, simplemente instanciar una clase UIImage vacío: P

UIImage *clearImage = [[UIImage alloc] init]; 
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal]; 
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal]; 
+0

me funciona perfectamente! –

+0

brillante !!!!! –

5

En Swift:

slider.setMinimumTrackImage(UIImage(), forState: .Normal) 
slider.setMaximumTrackImage(UIImage(), forState: .Normal) 
+0

Buena respuesta, pero te recomiendo que elimines todo después del primer bloque de código. Es muy tangencial a la pregunta, y el TL; DR es que usar una o dos imágenes vacías está bien. – phatmann

3

Parece que acaba de establecer el color de la tinta para borrar lo hace ...

[slider setMinimumTrackTintColor:[UIColor clearColor]]; 
    [slider setMaximumTrackTintColor:[UIColor clearColor]]; 
1

Respuesta de @Arjay Waran es el mejor en mi opinión.

Heres the Swift 3.0 Versión del mismo.

slider.minimumTrackTintColor = UIColor.clear 
slider.maximumTrackTintColor = UIColor.clear 

Saludos