UILongPressGestureRecognizer
只知道最少的触摸次数——默认情况下,一根手指——然后再放下另一根手指不会有太大的影响。在需要单次触摸的真实手机上尝试此操作会看到初始触摸导致识别器转换到状态 1。将第一根手指向侧面移动或第二根手指向下触摸都会导致转换到状态 2。抬起第一根手指touch down 会导致转换到状态 3 并结束手势。
我UILongPressGestureRecognizer
在与上面第一个视图相同的视图中添加了第二个,但给这个视图一个最低的两次触摸要求。像这样:
UILongPressGestureRecognizer *lpgr1 = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(lpgr1Method:)];
UILongPressGestureRecognizer *lpgr2 = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(lpgr2Method:)];
lpgr2.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:lpgr1];
[self.view addGestureRecognizer:lpgr2];
// ...
- (void)lpgr1Method:(UIGestureRecognizer *)gestureRecognizer {
UIGestureRecognizerState state = gestureRecognizer.state;
self.stateLabel.text = [NSString stringWithFormat:@"%d", (int)state];
}
- (void)lpgr2Method:(UIGestureRecognizer *)gestureRecognizer {
UIGestureRecognizerState state = gestureRecognizer.state;
self.stateLabel2.text = [NSString stringWithFormat:@"%d", (int)state];
}
如果我首先用一根手指触摸并按住它,lpgr1
则进入状态 1。如果我然后用第二根手指触摸并按住它,lpgr1
则进入状态 2。lpgr2
根本不会触发。
如果我同时用两根手指触碰并按住它,就会lpgr2
触发,并且lpgr1
永远不会触发。
所以看起来好像在整个视图中添加两个识别器只是令人困惑,并且无论你如何编程都不会达到你想要的结果。UIGestureRecognizer
因此,我怀疑正确的方法是编写你自己的子类。
编辑:我也试过这个:
lpgr2.delegate = self;
lpgr1.delegate = self;
// ...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return true;
}
这确实允许两个识别器同时触发,并识别出第二根手指已经触地。但是,lpgr1
一旦移除第一根手指,就会结束。我也无法做到你想要的。我会写子类,但我的注意力需要在其他地方。祝你好运!