我认为,这可以解决您的问题:
final class MultiSliderSwiftUI: UIViewRepresentable {
private let valueChanged: ([CGFloat]) -> Void
init(valueChanged: @escaping ([CGFloat]) -> Void) {
self.valueChanged = valueChanged
}
func makeUIView(context: UIViewRepresentableContext<MultiSliderSwiftUI>) -> MultiSlider {
let slider = MultiSlider()
slider.addTarget(self, action: #selector(sliderChanged(_:)), for: .valueChanged)
return slider
}
func updateUIView(_ uiView: MultiSlider, context: UIViewRepresentableContext<MultiSliderSwiftUI>) {
}
@objc func sliderChanged(_ slider: MultiSlider) {
valueChanged(slider.value)
}
}
如果你不喜欢final class为 SwiftUI 视图创建,你可以这样做:
struct MultiSliderSwiftUI: UIViewRepresentable {
private let events: MultiSliderEvents
init(valueChanged: @escaping ([CGFloat]) -> Void) {
events = MultiSliderEvents(valueChanged: valueChanged)
}
func makeUIView(context: UIViewRepresentableContext<MultiSliderSwiftUI>) -> MultiSlider {
let slider = MultiSlider()
events.addEvents(for: slider)
return slider
}
func updateUIView(_ uiView: MultiSlider, context: UIViewRepresentableContext<MultiSliderSwiftUI>) {
}
}
class MultiSliderEvents {
private let valueChanged: ([CGFloat]) -> Void
init(valueChanged: @escaping ([CGFloat]) -> Void) {
self.valueChanged = valueChanged
}
func addEvents(for slider: MultiSlider) {
slider.addTarget(self, action: #selector(sliderChanged(_:)), for: .valueChanged)
}
@objc func sliderChanged(_ slider: MultiSlider) {
valueChanged(slider.value)
}
}
在这两种方式中,您都可以使用它MultiSliderSwiftUI,例如Button:
MultiSliderSwiftUI { value in
print("\(value)")
}