2012-05-16 12 views
5

Quiero iniciar una acción al tocar en un punto particular en UISlider tocando, no arrastrando el control deslizante.cambiar el valor de Uislider al tocar en un punto particular

¿Cómo puedo tocar un UISlider en un punto para establecer el valor del control deslizante?

Un fragmento de código sería apreciado.

+0

¿Has probado algo por tu cuenta? – Zoleas

+0

lo he intentado poniendo botones personalizados, pero no es la forma correcta. también traté de definir la toma de contacto y retocar los eventos dentro del control deslizante, pero ninguno de ellos funciona. – Ronak

Respuesta

2

Try función UIView touchesBegan si v1 es un UIView con fondo liso detrás de ese lugar uislider \

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == v1) 
    { 
    CGPoint location = [touch locationInView:v1]; 
    NSInteger i = location.x; 
    } 

a continuación, obtener el porcentaje de xpoint multiplicando con el marco v1 es decir, si el valor del marco v1 x = 50 ei = 5means 10 por ciento después multiplicar el valor de porcentaje con el valor control deslizante para cambiar el valor del control deslizante

+1

@ user1389841 Si crees que la respuesta es útil, no olvides que puedes aceptar la respuesta. – NAZIK

+2

También puede ir con la función toques movidos para deslizar después de tocar la vista. – NAZIK

36
UISlider *slider = [[[UISlider alloc] init] autorelease]; 
… 

configuración deslizante

… 
UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)] autorelease]; 
[slider addGestureRecognizer:gr]; 
- (void)sliderTapped:(UIGestureRecognizer *)g { 
    UISlider* s = (UISlider*)g.view; 
    if (s.highlighted) 
     return; // tap on thumb, let slider deal with it 
    CGPoint pt = [g locationInView: s]; 
    CGFloat percentage = pt.x/s.bounds.size.width; 
    CGFloat delta = percentage * (s.maximumValue - s.minimumValue); 
    CGFloat value = s.minimumValue + delta; 
    [s setValue:value animated:YES]; 
} 
+3

No olvides iniciar un evento para UIControlEventValueChanged :-) –

+4

Como @DanVanWinkle indicó que no te olvides de disparar el evento de control, de lo contrario tu UI se actualizará pero tu servidor no lo hará. Para activar el evento, llame a este al final del control deslizante: [s sendActionsForControlEvents: UIControlEventValueChanged]; –

+1

¿Es posible hacer lo mismo con addTarget de UIControl: action: forControlEvents: API? – rclai

Cuestiones relacionadas