Files
JetsonMediaIOS/Jetson Media/utill/ThickSlider.swift
2025-08-17 22:08:25 +08:00

57 lines
1.7 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import SwiftUI
import UIKit
// 1. UIKit
class ThickSlider: UISlider {
var trackHeight: CGFloat = 40 //
override func trackRect(forBounds bounds: CGRect) -> CGRect {
//
let original = super.trackRect(forBounds: bounds)
return CGRect(x: original.origin.x,
y: (bounds.height - trackHeight) / 2,
width: original.width,
height: trackHeight)
}
}
// 2. SwiftUI
struct CustomSlider: UIViewRepresentable {
@Binding var value: Double
var trackHeight: CGFloat
var tintColor: Color
func makeUIView(context: Context) -> ThickSlider {
let slider = ThickSlider()
slider.trackHeight = trackHeight
slider.minimumValue = 0
slider.maximumValue = 1
slider.value = Float(value)
slider.addTarget(context.coordinator, action: #selector(Coordinator.valueChanged(_:)), for: .valueChanged)
slider.tintColor = UIColor(tintColor)
return slider
}
func updateUIView(_ uiView: ThickSlider, context: Context) {
uiView.value = Float(value)
uiView.trackHeight = trackHeight
uiView.tintColor = UIColor(tintColor)
}
func makeCoordinator() -> Coordinator {
Coordinator(value: $value)
}
class Coordinator: NSObject {
@Binding var value: Double
init(value: Binding<Double>) {
_value = value
}
@objc func valueChanged(_ sender: UISlider) {
value = Double(sender.value)
}
}
}