Pregunta

Mi objetivo es crear un UISlider más grande con 35 píxeles de altura para la imagen del pulgar.

Subclasifiqué UISlider y agregué el método:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50);
}

Luego configuré la imagen thum desde mi controlador usando setThumbImage:

Mi pulgar más grande se muestra bien.

El problema que tengo es que la zona de seguimiento sigue siendo la misma alrededor de 19 px de altura, ¿cómo extenderla a 50?

Gracias

T.

¿Fue útil?

Solución

Creo que es posible que desee ver thumbRectForBounds:trackRect:value:

Otros consejos

Un problema de larga data con el control UISlider del iPhone OS es que no puedes hacerlo más alto. Más específicamente, puede hacer que se vea más alto especificando imágenes más altas para su pulgar y pista, pero el área táctil permanece como un pequeño 23px de alto.

Michael Patricios ha publicado una forma para que los controles deslizantes predeterminados sean mucho más fáciles de tocar, y una variación de esa técnica puede manejar controles deslizantes más grandes. Lo que debe hacer es la subclase UISlider y anular pointInside en su clase:

// How many extra touchable pixels you want above and below the 23px slider
#define SIZE_EXTENSION_Y 10

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
    CGRect bounds = self.bounds;
    bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y);
    return CGRectContainsPoint(bounds, point);
}

En Interface Builder, configure el control deslizante para usar su nueva subclase UISlider, y ahora tiene un control deslizante con una altura táctil de 43 píxeles.

Estoy usando esta solución :)

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];

Aumente el área de impacto del pulgar UISlider aumentando la altura del marco UISlider. Este enfoque evita cualquier desplazamiento y la posterior necesidad de corregir el marco deslizante.

- (void)viewDidLoad{
    [super viewDidLoad];

    //expand slider hit area
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10);

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top