Я пытаюсь изменить цвет круга слайдера SwiftUI
. Но, к сожалению, я не нашел способа. Я делюсь кодом, который я сделал до сих пор. а также скриншот вида. Я не хочу использовать слайдер UIKit
в своем представлении SwiftUI. Я ценю любую помощь и предложения.
Slider(
value: $lightIntensity,
in: 1...5,
step: 2
) {
/// Used for accessibility
Text(R.string.localized.settings_appliancedetail_button_interior_light())
}
onEditingChanged: { editing in
isEditing = editing
}
.accentColor(R.color.primary.color)
Вот скриншот вида:
Итак, все, что я хочу, это изменить цвет белого круга на основной цвет.
Вы можете попробовать этот подход, используя UISlider.appearance()
:
struct ContentView: View {
@Binding var lightIntensity: Float
init(lightIntensity: Binding<Float>) {
self._lightIntensity = lightIntensity
UISlider.appearance().thumbTintColor = R.color.primary.color //<- here
}
}
Вы можете использовать наложение, чтобы эффективно закрыть кнопку:
let minLightIntensity = 1.0
let maxLightIntensity = 5.0
Slider(/* as before */) {
//...
}
.accentColor(R.color.primary.color)
.overlay {
GeometryReader { proxy in
let w = proxy.size.width
let h = proxy.size.height
Circle()
.fill(R.color.primary.color)
.offset(x: (lightIntensity - minLightIntensity) * (w - h) / (maxLightIntensity - minLightIntensity))
.allowsHitTesting(false)
}
}
При таком подходе вы можете изменить внешний вид кнопки не только ее цвет. Например, вы можете использовать другую фигуру или отобразить символ над кнопкой.
Спасибо, это работает. И мне не пришлось возвращать слайдер UIKit.