如何以编程方式发送UILongPressGesture?

如何向对象发送UILongPressGesture消息?

我知道如何发送触摸,但不是手势。 例如,如果我想发送一个触摸,我可以使用:

 [button sendActionsForControlEvents: UIControlEventTouchUpInside]; 

按钮会收到“内部修饰”。 我需要用长按手势做同样的事情。

想想自动UI测试。 调用与手势相关联的选择器不会有意义地测试任何东西。

导入并根据需要模拟的状态序列手动设置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但我发现在我的测试中没有区别),但是如果您的用例是自动测试以validation目标和操作已经设置这可能会满足您的需求。

你知道对象绑定到UILongPressGestureRecognizer选择器吗? 如果你知道,你可以打电话给它。 如果你问是否有类似touchesMoved:(UITouch *)touch ,那么答案是否定的。