シミュレートする必要がある一連の状態に応じて、プロパティをインポート<UIKit/UIGestureRecognizerSubclass.h>
して手動で設定します。state
これにより、追加されたターゲット/アクションのペアが呼び出されます。状態を手動で設定するたびに、メッセージをディスパッチするために実行ループを実行する必要があります。
の場合UILongPressGestureRecognizer
、実際の「タッチ、ホールド、ドラッグ、リリース」のジェスチャ シーケンスで見られる状態の正しいシーケンスを取得するために、 .UIViewController
内のサブクラスに次のコードを記述しましたviewDidLoad
。
UILongPressGestureRecognizer *r = [[UILongPressGestureRecognizer alloc] init];
[self.view addGestureRecognizer:r];
[r addTarget:self action:@selector(recognize:)];
r.state = UIGestureRecognizerStateBegan;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
r.state = UIGestureRecognizerStateChanged;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
r.state = UIGestureRecognizerStateEnded;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
[r reset];
これは本番コードでは危険だと思います(後で呼び出したいと思うかもしれreset
ませんが、私のテストではそうするかどうかに違いはありませんでした)が、ユースケースが自動化されたテストであり、ターゲットとアクションが正しく設定されていることを確認する場合これはあなたのニーズを満たすかもしれません。