我想使用SwiftUI创建一个按钮,当我的手指接触它时立即触发(类似于UIKit的touch down而不是touch up inside)。我还希望当我按住按钮时,按钮的不透明度变为0.7。并且我希望按钮的不透明度仅在我不再触摸按钮时才恢复为1。
我尝试了两种不同的按钮样式来创建这样一个按钮,但它们都失败了。
我尝试了两种不同的按钮样式来创建这样一个按钮,但它们都失败了。
struct ContentView: View {
var body: some View {
Button(action: {
print("action triggered")
}){
Text("Button").padding()
}
.buttonStyle(SomeButtonStyle())
}
}
struct SomeButtonStyle: ButtonStyle {
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.background(Color.green)
.opacity(configuration.isPressed ? 0.7 : 1)
.onLongPressGesture(
minimumDuration: 0,
perform: configuration.trigger//Value of type 'SomeButtonStyle.Configuration' (aka 'ButtonStyleConfiguration') has no member 'trigger'
)
}
}
struct SomePrimativeButtonStyle: PrimitiveButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.background(Color.green)
.opacity(configuration.isPressed ? 0.7 : 1)//Value of type 'SomePrimativeButtonStyle.Configuration' (aka 'PrimitiveButtonStyleConfiguration') has no member 'isPressed'
.onLongPressGesture(
minimumDuration: 0,
perform: configuration.trigger
)
}
}
显然上面的按钮样式都不起作用,因为 ButtonStyle 和 PrimitiveButtonStyle 没有共享相同的方法和属性,所以不能在同一个按钮样式中同时使用 isPressed 属性 (属于 ButtonStyle) 和 trigger 方法 (属于 PrimitiveButtonStyle)。
我应该如何配置我的按钮样式才能使其工作?