我想像原生 WatchKit 中给出的滑块一样显示进度。 但我想隐藏 + 和 - 按钮。
有什么办法可以实现这个目标吗?
得到了我的答案,
第 1 步: 前往 http://www.1x1px.me/(或任何可以创建 1Pixel 图像的网站)
第2步:选择任意颜色和不透明度0,然后下载图像
第 3 步: 使用此图像作为滑块的 Min Image 和 Max Image。
struct CustomSlider: View {
@Binding var value: Double
var range: ClosedRange<Double>
var onEditingChanged: (Bool) -> Void
//custom props view
var sizeCircle: CGFloat = 12
var height: CGFloat = 3
var tint: Color = .accentColor
var body: some View {
GeometryReader { geometry in
ZStack(alignment: .leading) {
Capsule()
.fill(Color.gray.opacity(0.5))
.frame(height: height)
Capsule()
.fill(tint)
.frame(width: self.progressWidth(geometry), height: height)
Circle()
.fill(Color.white)
.frame(width: sizeCircle, height: sizeCircle)
.offset(x: self.thumbOffset(geometry))
.gesture(DragGesture()
.onChanged { value in
self.updateValue(geometry, value: value)
self.onEditingChanged(true)
}
.onEnded { value in
self.updateValue(geometry, value: value)
self.onEditingChanged(false)
}
)
.padding(.leading, 3)
}
}
.frame(height: 10)
}
private func progressWidth(_ geometry: GeometryProxy) -> CGFloat {
CGFloat((self.value - self.range.lowerBound) / (self.range.upperBound - self.range.lowerBound)) * geometry.size.width
}
private func thumbOffset(_ geometry: GeometryProxy) -> CGFloat {
CGFloat((self.value - self.range.lowerBound) / (self.range.upperBound - self.range.lowerBound)) * geometry.size.width - 10
}
private func updateValue(_ geometry: GeometryProxy, value: DragGesture.Value) {
let sliderRange = geometry.size.width
let newValue = self.range.lowerBound + Double(value.location.x / sliderRange) * (self.range.upperBound - self.range.lowerBound)
self.value = min(max(self.range.lowerBound, newValue), self.range.upperBound)
}
}
您可以自定义滑块,这适用于同一个滑块