[SwiftUI] onTapGestureのタップ検知領域を画面全体にする

SwiftUIのonTapGestureでタップを検知する領域を画面全体にするのに手こずりました。

あまりしっくりきていないのですが、一応画面全体でタップを検知する事のできるコードが書けたので、それを残します。

SwiftUIのonTapGestureのタップ検知領域を画面全体にする

結論から言うと、画面全体を覆うサイズでviewを1つ配置して、それにonTapGestureを設定します。

実際の画面

実際のコード

import SwiftUI
 
struct ContentView: View {
    @State var f: Bool

    init(){
        self.f = true
    }

    var body: some View {
        ZStack {
            if f {
                Color.blue
            } else {
                Color.white
            }
        }
        .onTapGesture {
            if f {
                f = false
            } else {
                f = true
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

実際のコード解説

ZStackが画面全体を覆うviewです。
今回はプレビューが分かりやすいようにColorを設定しています。
Colorの値はフラグで判定しています。

onTapGestureでは、その時のColorでフラグの値を変更しています。