【发布时间】:2020-01-06 00:38:58
【问题描述】:
我想用 SwiftUI 创建一个按钮,它会在我的手指触摸它的那一刻触发(就像 UIKit 的触摸向下而不是内部向上触摸)。当我的手指按下按钮时,我还希望按钮的不透明度变为 0.7。只有当我的手指不再触摸按钮时,我希望按钮的不透明度变回 1。
我尝试了 2 种不同类型的按钮样式来创建这样的按钮,但都失败了:
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)和触发方法(属于 PrimitiveButtonStyle)按钮样式相同。
我应该如何配置我的按钮样式以使其工作?
【问题讨论】:
标签: swiftui