2010-08-18 37 views
8

Làm thế nào tôi có thể đặt một UILabel trên ngón tay cái của UISlider ... để khi tôi di chuyển ngón tay cái .... UILabel cũng sẽ di chuyển .... như nó là trên ngón tay cái ...UILabel Over UISlider Thumb

Bất kỳ ý tưởng nào ??

Trả lời

5

Nút "không khả dụng cho mỗi API công khai, vì vậy cơ hội không tốt để gắn nó lên - nếu đó là một chế độ xem phụ và không chỉ được vẽ trực tiếp.

Vì vậy, bạn nên thêm nhãn cho cùng một chế độ xem với thanh trượt (đảm bảo bạn thêm nhãn sau để xuất hiện trên nó). Sau đó, bạn có thể lắng nghe các sự kiện thay đổi giá trị và đặt nhãn của bạn cho phù hợp. Nó là tỷ lệ tuyến tính giữa các điểm cuối mà bạn cần tìm ra lúc đầu, nhưng nó không quá khó.

Sửa với mã:

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

Lưu ý: Mã chưa được kiểm tra ;-)

+0

tôi nghĩ rằng tôi đã nhận nó .. ....... nhưng có thể cung cấp mã mẫu ... ?? – Rony

+0

Đã thêm một số mã ... – Eiko

27

Hãy thử điều này

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

Tôi có thể g và giá trị chính xác nhất bằng cách sử dụng đoạn mã này.

+1

+1 Nó đặt nhãn di chuyển trên đầu Chế độ xem. Bạn có thể điều chỉnh lbl.center.y cho vị trí tùy chỉnh .. – HDdeveloper

+0

Cảm ơn câu trả lời của bạn, dòng này phải là: yourLabel.center = CGPointMake (thumbRect.origin.x + self.slider.frame.origin.x + yourLabel. frame.size.width/2.f, self.slider.frame.origin.y - 20); Tuy nhiên –

1

Chỉ cần thêm một ImageView vào ngón tay cái của thanh trượt thêm một nhãn trên 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

Cùng câu trả lời với 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)