簡潔にするため、特定のロングプレスジェスチャがトリガされるたびにログを記録したいと仮定しますが、ジェスチャが対象とする可能性のあるすべてのセレクタにログコードを入れたくありません。コードを特定のジェスチャーのサブクラスの1か所に配置したいので、開始状態になるとログコードが実行されます。どこでもジェスチャー用のカスタムコードが使用されていますか?
ジェスチャーのサブクラスでこれについてどうやって行くのですか?
ジェスチャのinitWithTargetメソッドをオーバーライドし、NSInvocationオブジェクトに指定されたターゲット/アクションを保存し、ターゲット/アクションをログコードに置き換え、ログコードで格納されたNSInvocationオブジェクトを呼び出す方法がわかりましたそれが行われたとき。ミッドインサイド技術の一種。私はこの実装を本当に好きではない、それはかなりハッキリのようだ。
編集:これは、長押しのジェスチャーです。私はUIGestureRecognizerSubclass.hを知りませんでしたが、今では、ジェスチャーが認識される前にtouchesBeganトリガーを行います。ジェスチャーが認識されていることを特に監視するにはどうすればよいですか? setStateをオーバーライドすると動作するようですが、認識された状態を待つことは、アクションがトリガーされるまでトリガーしません。
ちょうどサブクラスを作ります。 – Roecrew
シングルトンファイルにロギングコードを入れて、それをサブクラスのそれぞれの 'touchesBegan'メソッドで使用するのはどうですか?こうすることで、ロギングコードが1つのオブジェクトに含まれ、常にそのコードを呼び出すことになります。 – adev
@adevこれは長いプレゼンテーションのためのものであることを明確にすべきだった。 touchesBeganトリガだけでなく、認識されているジェスチャを探す必要があります。 touchesBeganを使用してこれをテストすると、すばやくタップすると、アクションがトリガーされることなくログに記録されます。 –