У меня есть uislider
с пузырем выноски, центр X которого следует над центром X большого пальца uislider
.
Я проверил его на iPhone 7, и он отлично работает, и он такжеотлично работает на других устройствах после перемещения большого пальца.
У меня проблема в том, что при начальной загрузке пузырь и большой палец должны быть выровнены, как при перемещении большого пальца, но на устройстве, таком как iPhone8+ или iPhone SE, центр пузыря x смещен от центра большого пальца x (+/- 20 пунктов).
Я считаю, что расчет для выравнивания двух объектов является правильным, поскольку он работает нормально, когдаВы фактически перемещаете большой палец, но что-то с начальным вычислением x большого пальца выключено.В некоторых журналах консоли X большого пальца изначально читается как 180 пунктов, но при касании первое значение на самом деле составляет 201 пункт.Затем пузырь настраивается соответствующим образом.
Я использую собственный подкласс uislider
для градиентов и тому подобное, и это может потенциально повлиять на него (?), Но это сбивает с толку, как он все еще работает на ощупь.
Любая помощь будет принята.
On 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
}
}