2010-08-18 2 views
8

Как я могу поместить UILabel над большим пальцем UISlider ... так, чтобы при перемещении большого пальца ... UILabel также будет двигаться ... как на большом пальце ...UILabel Over UISlider Thumb

Любая идея ??

ответ

5

«Ручка» недоступна для общедоступного API, поэтому неплохие шансы на ее подключение - , если - это субподготовка вообще, а не только нарисованная напрямую.

Итак, вы должны добавить ярлык к тому же виду, что и ползунок (обязательно добавьте его позже, чтобы появилось над). Затем вы можете прослушивать события изменения стоимости и соответствующим образом размещать свой ярлык. Это линейное масштабирование между конечными точками, которые вам нужно выяснить сначала, но это не должно быть слишком сложно.

Редактировать с кодом:

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

Примечание: непроверенный код ;-)

+0

я думаю, что я получил это .. ....... но может дать пример кода ... ?? – Rony

+0

Добавлен код ... – Eiko

27

Попробуйте

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

Я мог бы g et наиболее точное значение, используя этот фрагмент.

+1

+1 Он установил движущуюся метку в верхней части представления. Вы можете настроить lbl.center.y для пользовательской позиции. – HDdeveloper

+0

Спасибо за ваш ответ, эта строка должна быть: yourLabel.center = CGPointMake (thumbRect.origin.x + self.slider.frame.origin.x + yourLabel. frame.size.width/2.f, self.slider.frame.origin.y - 20); хоть –

1

Просто добавьте ImageView на большом пальце ползуна добавить ярлык на 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

тот же ответ с 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) 
Смежные вопросы