質問: UIViewのタッチイベントハンドラである以下の3つにログを出力してみたところ、 TouchesBegan TouchesMoved TouchesEnded が必ずこの順で呼ばれると思っていたのですが、 北〇百裂拳のように数秒間連打しているとTouchesBeganやTouchesMovedが呼ばれずにTouchesEndedが単体で呼ばれるということが分かりました。 どういう条件なのかいまいちピンと来ないのですが、どういう操作と見なされているのでしょうか。 タッチ開始を認識できていないということなのでしょうか? ◆環境 Visual Studio 2019 Xamarin 16.1 Xamarin.iOS 12.10 実機iPadのiOS 12.3
回答: 該当のソースは Apple の中の人しか閲覧できないと思いますので、正しい答えを持っている人は Apple の中の人のみかと思います。 が、予想をすると ``` func touchesBegan { if (touchesBeganIsStarted) { return } // 既に実行中でフラグ立っていたら実行しない // 実際に touchesEnded リスナーを呼ぶ処理 } ``` のように排他処理がされているのでないのでしょうか。 Began に関して排他でリスナーが呼ばれなくても、 Ended ではタイミング/状態によって排他を通るということはあるかと思います。