首页 > 解决方案 > 如何使用步进滑块在滑块拇指上添加 UILabel?

问题描述

我有一个有 5 个部分的滑块,我想为这些部分跨过!我这样做了:

@IBAction func changeCostSlider(_ sender: UISlider) {
    sender.value = roundf(costSlider.value)
}

我还想在滑块的拇指上添加一个标签,我尝试将此代码添加到上面的代码中:

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

但是当我移动滑块时,我的标签会从我在情节提要中放置标签的位置跳出来,并且有一些滞后!有人对如何将此标签添加到我的步进滑块并正常工作有任何建议吗?!

我认为我的问题是我将我的 UILable 固定在 storyborad 中,当我在滑块中移动拇指时,一毫秒,它又回到了固定的位置!我该如何解决?!

我尝试以编程方式添加我的 UILabel,但在我触摸拇指之前它不起作用!它是如何完成的:

var sliderLableP = UILabel()
@IBAction func changeCostSlider(_ sender: UISlider) {
    sender.value = roundf(costSlider.value)
    print(costSlider.value)
    let trackRect: CGRect  = costSlider.trackRect(forBounds: costSlider.bounds)
    let thumbRect: CGRect  = costSlider.thumbRect(forBounds: costSlider.bounds , trackRect: trackRect, value: costSlider.value)
    let x = thumbRect.origin.x + costSlider.frame.origin.x
    let y = costSlider.frame.origin.y - 20
    sliderLableP.center = CGPoint(x: x, y: y)
}

在我的 viewDidLoad 中,我添加了这个:

sliderLableP = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
    let trackRect: CGRect  = costSlider.trackRect(forBounds: costSlider.bounds)
    let thumbRect: CGRect  = costSlider.thumbRect(forBounds: costSlider.bounds , trackRect: trackRect, value: costSlider.value)
    let x = thumbRect.origin.x + costSlider.frame.origin.x
    let y = costSlider.frame.origin.y - 20
    sliderLableP.center = CGPoint(x: x, y: y)
    sliderLableP.textAlignment = NSTextAlignment.center
    sliderLableP.textColor = UIColor.blue
    self.containerView.addSubview(sliderLableP)
    containerView.bringSubview(toFront: sliderLableP)

标签: iosswiftuilabeluislider

解决方案


这个解决方案对我有用:

@IBAction func changeCostSlider(_ sender: UISlider) {
    sender.value = roundf(sender.value)

    let trackRect = sender.trackRect(forBounds: sender.frame)
    let thumbRect = sender.thumbRect(forBounds: sender.bounds, trackRect: trackRect, value: sender.value)
    self.sliderLabel.center = CGPoint(x: thumbRect.midX, y: self.sliderLabel.center.y)
}

推荐阅读