SwiftUI 枠内どこでも反応、Long Pressも反応するボタンを作成する

やりたい事

①枠内どこでも反応
②Tap:Tap用のアクション
③Long Press:Long Press用のアクション

1stアクション

コード

VStack(spacing: 16.0) {
    Button(action: {
        print("Button Action!!")
    }, label: {
        Text("Button")
            .frame(width: 200, height: 100, alignment: .center)
            .overlay(RoundedRectangle(cornerRadius: 16.0).stroke())
    })
    .onLongPressGesture {
        print("Button Action Long!!")
    }
    Text("Text Button")
        .frame(width: 200, height: 100, alignment: .center)
        .overlay(RoundedRectangle(cornerRadius: 16.0).stroke())
        .onTapGesture {
            print("Text Action!!")
        }
        .onLongPressGesture {
            print("Text Action Long!!")
        }
        .foregroundColor(.blue)
}
.padding(32.0)
.background(Color(.systemGray6))

結果

やりたい事全てを叶える事は出来ない。
ButtonはLong Pressを反応させられない。
Textは枠内どこでも反応させられない。

現時点の解決策

コード

VStack(spacing: 16.0) {
    Text("Text2 Button")
        .frame(width: 200, height: 100, alignment: .center)
        .overlay(RoundedRectangle(cornerRadius: 16.0).stroke())
        .overlay(RoundedRectangle(cornerRadius: 16.0).foregroundColor(Color.red.opacity(0.0000001)))
        .onTapGesture {
            print("Text2 Action!!")
        }
        .onLongPressGesture {
            print("Text2 Action Long!!")
        }
        .foregroundColor(.blue)
}
.padding(32.0)
.background(Color(.systemGray6))

見た目

試行は続く

・タップとロングプレスをさせるUIデザインがどうなのか?
・他に方法があるのではないか。

Swift

Posted by shi-n