2010-08-18 40 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 2010-08-18 10:35:16

+0

添加了一些代码... – Eiko 2010-08-18 10:44:02

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

我可以克通过使用此片段可以获得最准确的价值。

+1

+1它在视图的顶部设置移动标签。您可以调整lbl.center.y的自定义位置。 – HDdeveloper 2012-11-27 18:05:27

+0

感谢您的回答,此行必须是:yourLabel.center = CGPointMake(thumbRect.origin.x + self.slider.frame.origin.x + yourLabel。 frame.size.width/2.f,self.slider.frame.origin.y - 20);虽然 – 2017-03-29 01:11:47

1

刚上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

相同的答案加上滑块时的ImageView的添加标签与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)