Azi*_*chi 1 uilabel uislider ios swift
我有一个包含5个部分的滑块,我想逐步了解这些部分!而我做到了:
@IBAction func changeCostSlider(_ sender: UISlider) {
sender.value = roundf(costSlider.value)
}
Run Code Online (Sandbox Code Playgroud)
我也想在滑块的拇指上添加标签,我试图将此代码添加到上面的代码中:
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)
Run Code Online (Sandbox Code Playgroud)
但是,当我移动滑块时,我的标签会从将其放置在情节提要中的位置跳出来,并且会有些滞后!有人对如何将此标签添加到我的步进滑块并正常工作有任何建议吗?
我认为我的问题是我将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)
}
Run Code Online (Sandbox Code Playgroud)
在我的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)
Run Code Online (Sandbox Code Playgroud)
此解决方案适用于我:
@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)
}
Run Code Online (Sandbox Code Playgroud)