2010-08-18 9 views
8

Come posso mettere un UILabel sul pollice di UISlider ... in modo che quando sposto il pollice .... UILabel si sposterà anche .... come è sul pollice ...UILabel Over UISlider Thumb

Qualche idea ??

risposta

5

La "manopola" non è disponibile per API pubblica, quindi scarse possibilità di collegarlo - se è una vista secondaria e non solo disegnata direttamente.

Quindi dovresti aggiungere l'etichetta alla stessa vista del cursore (assicurati di aggiungerlo più tardi in modo che compaia su). È quindi possibile ascoltare gli eventi di modifica del valore e posizionare l'etichetta di conseguenza. È un ridimensionamento lineare tra gli endpoint che è necessario individuare all'inizio, ma non dovrebbe essere troppo difficile.

Modifica con codice:

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: codice non testato ;-)

+0

penso di aver capito .. ....... ma posso dare un codice di esempio ... ?? – Rony

+0

Aggiunto codice ... – Eiko

27

Prova questa

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); 
} 

Potrei g et valore più accurato utilizzando questo frammento.

+1

+1 Imposta l'etichetta in movimento nella parte superiore della vista. È possibile regolare lbl.center.y per la posizione personalizzata. – HDdeveloper

+0

Grazie per la risposta, questa riga deve essere: yourLabel.center = CGPointMake (thumbRect.origin.x + self.slider.frame.origin.x + yourLabel. frame.size.width/2.f, self.slider.frame.origin.y - 20); anche se –

1

è sufficiente aggiungere un'imageview sul pollice della cursore aggiungere un'etichetta sul 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

Stessa risposta 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)