2010-08-18 19 views
8

¿Cómo puedo poner un UILabel sobre el pulgar de UISlider ... para que cuando mueva el pulgar ... UILabel también se mueva ... como está en el pulgar ...UILabel Over UISlider Thumb

¿Alguna idea?

Respuesta

5

La "perilla" no está disponible por API pública, por lo que hay malas posibilidades de conectarla - si es una subvista y no solo dibujada directamente.

Por lo tanto, debe agregar su etiqueta a la misma vista que el control deslizante (asegúrese de agregarlo más tarde para que aparezca sobre). Luego puede escuchar los eventos de cambio de valor y colocar su etiqueta en consecuencia. Es un escalado lineal entre los puntos finales lo que necesita saber al principio, pero no debería ser demasiado difícil.

Editar con el código:

yourLabel = [[UILabel alloc]initWithFrame:....]; 
// .. configure label 
[[yourSlider superview] addSubview:yourLabel]; 
[yourSlider addTarget:self action:@selector(adjustLabelForSlider:) forControlEvents:UIControlEventValueChanged]; 


-(void)adjustLabelForSlider:(id)slider 
{ 
    float value = slider.value; 
    float min = slider.minimumValue; 
    float max = slider.maximumValue; 

    CGFloat newX = ...; // Calculate based on yourSlider.frame and value, min, and max 
    CGFloat newY = ...; 

    [yourLabel setCenter:CGPointMake(newX,newY)]; 
} 

Nota: el código no probado ;-)

+0

creo que lo tengo .. ....... pero puede dar un código de muestra ... ?? – Rony

+0

Se agregó un código ... – Eiko

27

Prueba este

yourLabel = [[UILabel alloc]initWithFrame:....]; 

//Call this method on Slider value change event 

-(void)sliderValueChanged{ 
    CGRect trackRect = [self.slider trackRectForBounds:self.slider.bounds]; 
    CGRect thumbRect = [self.slider thumbRectForBounds:self.slider.bounds 
           trackRect:trackRect 
            value:self.slider.value]; 

    yourLabel.center = CGPointMake(thumbRect.origin.x + self.slider.frame.origin.x, self.slider.frame.origin.y - 20); 
} 

Podría g y el valor más preciso al usar este fragmento.

+1

+1 Establece la etiqueta en movimiento en la parte superior de la Vista. Puede ajustar lbl.center.y para la posición personalizada. – HDdeveloper

+0

Gracias por su respuesta, esta línea tiene que ser: yourLabel.center = CGPointMake (thumbRect.origin.x + self.slider.frame.origin.x + yourLabel. frame.size.width/2.f, self.slider.frame.origin.y - 20); aunque –

1

simplemente añada una imageview en el pulgar de control deslizante añadir una etiqueta en imageview

- (IBAction)valueChangedSlider:(id)sender { 
handleView = [_slider.subviews lastObject]; 
label = [[UILabel alloc] initWithFrame:handleView.bounds]; 
label = (UILabel*)[handleView viewWithTag:1000]; 

if (label==nil) { 

    label = [[UILabel alloc] initWithFrame:handleView.bounds]; 

    label.tag = 1000; 

    [label setFont:[UIFont systemFontOfSize:12]]; 
    label.textColor = [UIColor redColor]; 
    label.backgroundColor = [UIColor clearColor]; 

    label.textAlignment = NSTextAlignmentCenter; 

    [handleView addSubview:label]; 


} 
label.text = [NSString stringWithFormat:@"%0.2f", self.slider.value]; 

}

0

La misma respuesta con swift3:

let trackRect: CGRect = slider.trackRect(forBounds: slider.bounds) 
    let thumbRect: CGRect = slider.thumbRect(forBounds: slider.bounds , trackRect: trackRect, value: slider.value) 
    let x = thumbRect.origin.x + slider.frame.origin.x 
    let y = slider.frame.origin.y - 20 
    sliderLabel.center = CGPoint(x: x, y: y)