在SwiftUI中更改滑块滑块

hyrbngr7  于 2023-09-30  发布在  Swift
关注(0)|答案(3)|浏览(142)

是否可以像在UIKit中使用UISlider一样在SwiftUI中更改Slider的拇指?使用UISlider,您需要做的就是:self.setThumbImage(UIImage(named: "Play_black"), for: .normal)

vfhzx4xs

vfhzx4xs1#

你可以用SwiftUI-Introspect来实现。
你基本上只是从SwiftUI的Slider访问底层的UISlider,然后在那里设置它。这比创建一个自定义滑块或制作一个可表示的要容易得多。
代码:

struct ContentView: View {
    @State private var value: Double = 0

    var body: some View {
        Slider(value: $value)
            .introspectSlider { slider in
                slider.setThumbImage(UIImage(named: "Play_black"), for: .normal)
            }
    }
}

结果(临时图像):

b09cbbtk

b09cbbtk2#

你可以在SwiftUI中使用UIKit的appearance来实现。
范例:

struct CustomSlider : View {
    @State private var value : Double = 0
    init() {
        let thumbImage = UIImage(systemName: "circle.fill")
        UISlider.appearance().setThumbImage(thumbImage, for: .normal)
    }
    
    var body: some View {
        Slider(value: $value)
    }
}
qyyhg6bp

qyyhg6bp3#

在iOS 16中也遇到了同样的问题。最简单的自定义方法是使用**.onAppear**修饰符:

Slider(value: $value)
    .onAppear {
        let thumbImage = UIImage(systemName: "circle.fill")
        UISlider.appearance().setThumbImage(thumbImage, for: .normal)
    }

灵感来源:https://developer.apple.com/forums/thread/719658

  • 根据Soundflix的评论更新 *
    修改:这会改变同一视图中的所有滑块!!!

更明确地说,如果您有一个包含此.onAppear代码的SampleViewSampleView将 * 污染 * 任何包含SampleView的视图(以及任何上游下游视图)!),所以如果你想在你的应用中使用多种滑块样式,那么在使用这个解决方案时要非常小心!
如果你在理解了它的局限性后仍然想使用这段代码,你可能想把.onAppear移到最外面的视图中,以更准确地反映它的作用,就像这样:

var body: some View {
    VStack {
        Text("\(value1)")
        Slider(value: $value1)
        Text("\(value2)")
        Slider(value: $value2)
     }
    .onAppear {
        let thumbImage = UIImage(systemName: "circle.fill")
        UISlider.appearance().setThumbImage(thumbImage, for: .normal)
    }
}

相关问题