2013-01-18 17 views
5

UILongPressGestureメッセージをオブジェクトに送信するにはどうすればよいですか?プログラムでUILongPressGestureを送信するにはどうすればよいですか?

私はタッチを送信する方法を知っていますが、ジェスチャーは送信しません。たとえば、私が使用することができますタッチを送信したい場合:

[button sendActionsForControlEvents: UIControlEventTouchUpInside]; 

とボタンが「内部をタッチアップ」受け取ることになります。私は長い間のプレスのジェスチャーで同じことをする必要があります。

自動UIテストを検討してください。ジェスチャに関連付けられたセレクタを呼び出すことは意味のある何かをテストしません。

+0

「メッセージをオブジェクトに送る」とはどういう意味ですか? – iProgrammed

+0

@iプログラム説明を明確にするために私の言い添えられた質問をご覧ください。 –

答えて

7

<UIKit/UIGestureRecognizerSubclass.h>をインポートし、シミュレートする必要がある状態のシーケンスに適切に応じてstateプロパティを設定します。これにより、追加されたターゲット/アクションのペアが呼び出されます。手動で状態を設定するたびに、メッセージがディスパッチされるように実行ループを実行させる必要があります。

UILongPressGestureRecognizerについては

、ジェスチャーの実際の「タッチ、ホールド、ドラッグ、リリース」配列に見られるような状態の正しい順序を取得するために、私はviewDidLoad内部UIViewControllerサブクラスに次のコードを書いた:。

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を呼び出すために、その後望むかもしれないが、私は私のテストでそうやないこととの間に差は認められません)生産コードでは危険だろうと想像が、あなたのユースケースは、ターゲットということを確認するためのテストを自動化されている場合アクションが正しく設定されていれば、これはあなたのニーズを満たすかもしれません。

+0

私はまだいくつかのタイミングの問題などがありますが、これは正しい軌道に乗っています(確かに質問に答えます)。ありがとう! –

0

オブジェクトがUILongPressGestureRecognizerに関連付けられているセレクタを知っていますか?あなたがそれを知っていれば、あなたはそれを単に呼び出すことができます。 touchesMoved:(UITouch *)touchのようなメソッドがあるかどうかを確認する場合は、答えは「いいえ」です。

+0

'[button sendActionsForControlEvents:UIControlEventTouchUpInside]'に似ていますが、タッチイベントの代わりにジェスチャーがあります。あなたは2番目の文で、いいえ、それは不可能であると言っていますか? –

関連する問題