💭

SwiftUIのGestureMaskに別の世界線はあるか

2022/10/29に公開

思うところあってこれを書いている。
SwiftUIの GestureMask は、仕様を決めた人と実装した人で認識の違いがあるのではないか。

説明に用いるViewの構成

View A ジェスチャーあり
↳ View B ジェスチャーあり
↳ View C ジェスチャーなし
とする。
View Aの中にView BとView Cがある。
View AとView Bにはジェスチャーが設定してある。
View Aのジェスチャーの設定時に GestureMask も指定する。

現状

Bを操作 Cを操作
all Bが反応 Aが反応
subviews Bが反応 なし

別の世界線

Bを操作 Cを操作
all AとBが反応 Aが反応
subviews Bが反応 Aが反応

allは、葉でジェスチャーに反応しても、そのまま上に伝える
subviewsは、葉でジェスチャーに反応したら、上に伝えない

なぜそう思ったか

allの

Enable both the added gesture as well as all other gestures on the view and its subviews.

という説明はすべてのジェスチャーを有効にするように言っていそう。

subviewsの

Enable all gestures in the subview hierarchy but disable the added gesture.

という説明のbut以降はサブビューにジェスチャーがあったら(サブビューがジェスチャーに反応したか)という仮定の中の話と解釈できるのではないか。

と思ったから。

Discussion