如何以编程方式发送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
,那么答案是否定的。