UISlider 跟踪标注未与拇指对齐
UISlider Tracking Callout Unaligned to Thumb
我有一个 uislider
,它有一个标注气泡,其中心 X 位于 uislider
拇指的中心 X 上方。
我在 iPhone 7 上对其进行了测试,它运行良好,移动拇指后它在其他设备上也能正常运行。
我遇到的问题是,在初始加载时,气泡和拇指应该像移动拇指时那样对齐,但在 iPhone 8+ 或 iPhone 这样的设备上SE,气泡的中心 x 偏离拇指的中心 x (+/- 20-ish pts)。
我相信使两个对象对齐的计算是正确的,因为当您实际移动拇指时它工作正常,但拇指 x 的初始计算有些问题。对于一些控制台日志,拇指的 X 最初会读作 180 点,但在触摸时第一个值实际上是 201 点。然后气泡会相应地调整。
我正在为渐变等使用自定义 uislider
子类,这可能会影响它(?)但它仍然在触摸时如何工作令人困惑。
如有任何帮助,我们将不胜感激。
在 viewDidLoad 上(前导约束是安全区域):
distanceSlider.setValue(Float(sliderValue), animated: false)
distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)
关于距离变化:
distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)
拇指中心 X 扩展:
extension UISlider {
var thumbCenterX: CGFloat {
let trackRect = self.trackRect(forBounds: frame)
let thumbRect = self.thumbRect(forBounds: bounds, trackRect: trackRect, value: value)
return thumbRect.midX
}
}
尝试在 viewDidLayoutSubviews()
中设置以下行。看起来添加了滑块的视图未正确布局其大小。
distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)
为什么要使用自定义图像并根据滑块值进行调整。可以直接使用
func setThumbImage(_ image: UIImage?,
for state: UIControl.State)
检查参考苹果文档 link https://developer.apple.com/documentation/uikit/uislider/1621336-setthumbimage
我有一个 uislider
,它有一个标注气泡,其中心 X 位于 uislider
拇指的中心 X 上方。
我在 iPhone 7 上对其进行了测试,它运行良好,移动拇指后它在其他设备上也能正常运行。
我遇到的问题是,在初始加载时,气泡和拇指应该像移动拇指时那样对齐,但在 iPhone 8+ 或 iPhone 这样的设备上SE,气泡的中心 x 偏离拇指的中心 x (+/- 20-ish pts)。
我相信使两个对象对齐的计算是正确的,因为当您实际移动拇指时它工作正常,但拇指 x 的初始计算有些问题。对于一些控制台日志,拇指的 X 最初会读作 180 点,但在触摸时第一个值实际上是 201 点。然后气泡会相应地调整。
我正在为渐变等使用自定义 uislider
子类,这可能会影响它(?)但它仍然在触摸时如何工作令人困惑。
如有任何帮助,我们将不胜感激。
在 viewDidLoad 上(前导约束是安全区域):
distanceSlider.setValue(Float(sliderValue), animated: false)
distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)
关于距离变化:
distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)
拇指中心 X 扩展:
extension UISlider {
var thumbCenterX: CGFloat {
let trackRect = self.trackRect(forBounds: frame)
let thumbRect = self.thumbRect(forBounds: bounds, trackRect: trackRect, value: value)
return thumbRect.midX
}
}
尝试在 viewDidLayoutSubviews()
中设置以下行。看起来添加了滑块的视图未正确布局其大小。
distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)
为什么要使用自定义图像并根据滑块值进行调整。可以直接使用
func setThumbImage(_ image: UIImage?,
for state: UIControl.State)
检查参考苹果文档 link https://developer.apple.com/documentation/uikit/uislider/1621336-setthumbimage