Swiftui 有没有办法通过.onLongPress手势将第三个切换选项添加到打开/关闭状态?

Swiftui 有没有办法通过.onLongPress手势将第三个切换选项添加到打开/关闭状态?,swiftui,Swiftui,我已经设置了一个切换,如下图所示,用于切换图像的开/关或通过/失败。 我正在尝试添加第三种状态,使用长按手势将图像变成灰色,并带有斜线图标。 我已经在文本元素中实现了这一点,因为at is没有bool条件,但是经过多次搜索,我无法找到如何使用图像实现这一点 我的目标是: Image(systemName: isPressed ? "checkmark.circle.fill" : "x.circle.fill" || isLongPressed ? &qu

我已经设置了一个切换,如下图所示,用于切换图像的开/关或通过/失败。 我正在尝试添加第三种状态,使用长按手势将图像变成灰色,并带有斜线图标。 我已经在文本元素中实现了这一点,因为at is没有bool条件,但是经过多次搜索,我无法找到如何使用图像实现这一点

我的目标是:

Image(systemName: isPressed ? "checkmark.circle.fill" : "x.circle.fill" || isLongPressed ? "checkmark.circle.fill" : "slash.circle.fill")
虽然我知道这是不对的

struct element: View {
    var section: CleaningElements = courseSections[0]
    
    @State private var isPressed = true
    @State private var isLongPressed = true
    
    var body: some View {
        HStack(alignment: .top) {
            Button(action: {
                    self.isPressed.toggle() }) {
                Image(systemName: isPressed ? "checkmark.circle.fill" : "x.circle.fill")
                    .font(.system(size: 20))
                    .foregroundColor(isPressed ? .green : .red)
                    .frame(width: 36, height: 36)
                    .background(RoundedRectangle(cornerRadius: 12, style: .continuous).fill(section.color))
            }
            Text(section.title)
                .font(.subheadline)
                .bold()
                .opacity(isLongPressed ? 1.0 : 0.3)
                .foregroundColor(isLongPressed ? Color.primary : Color.secondary)
                .onLongPressGesture {
                    self.isLongPressed.toggle()
                }
            Spacer()
        }
        .padding(3)
    }
}

这是一个可能的解决方案的演示(使用简化的代码)-保留按钮以突出显示,但操作可以处理,但不能自定义手势。使用Xcode 12.1/iOS 14.1进行测试

struct element: View {
    
    @State private var isPressed = false
    @State private var isLongPressed = false
    
    var body: some View {
        Button(action: {}) {
            Group {
                if isLongPressed {
                    Image(systemName: "minus.circle")
                        .foregroundColor(.gray)
                } else {
                    Image(systemName: isPressed ? "checkmark.circle.fill" : "x.circle.fill")
                        .foregroundColor(isPressed ? .green : .red)
                }
            }
            .font(.system(size: 20))
            .frame(width: 36, height: 36)
            .background(RoundedRectangle(cornerRadius: 12, style: .continuous).fill(Color.yellow))
            .gesture(TapGesture().onEnded {
                isLongPressed = false
                self.isPressed.toggle()
            })
            .gesture(LongPressGesture().onEnded { _ in
                isLongPressed = true
            })
        }
    }
}