TouchesBegan只调用一次

时间:2016-10-15 15:39:17

标签: ios objective-c uiview multi-touch touchesbegan

我有一个恼人的问题。我有一个子类UIViewController,并使用通常的-(void)touchesBegan-(void)touchesMoved ...方法检查触摸事件。无论我尝试什么,它们只被要求第一次接触,其他被完全忽略。我知道这个问题已在这里解决了:

Why are UIViewController touchesBegan, touchesMoved & touchesEnded only being called when the first of two touches begins, moves or ends?

然而,那里的解决方案对我没用。我已在每个视图上将multipleTouchEnabled设置为YES,并在每个子视图上将userInteractionEnabled设置为NO,但我将子视图上的视图控制器上的主视图设置为。{/ p >

2 个答案:

答案 0 :(得分:1)

我认为这个问题仅仅是了解touches事件的工作方式。

触摸是手指,手指是触摸。触摸具有视图 - 触摸最初发生的视图 - 这是其生命周期的剩余视图。手指的行为将作为一系列触摸事件发送到该视图。

现在,假装您只有一个视图,并且在该视图中实现了touches个事件。然后,屏幕上的每个手指一次调用touchesBegan 。但是当手指2下降时,如果屏幕上的手指1已经已经已经,那么显然手指1现在没有开始;那已经发生了。因此,对touchesBegan调用将在其touches设置中仅包含指针2,因为这是刚刚开始的手指。如果Finger 1仍处于关闭状态,则会在事件的触摸中进行二次报告,但这不是触摸事件,因此它不会在{{1设置。

答案 1 :(得分:-1)

感谢@matt的想法。我在一个空项目上尝试过,方法仍然只调用一次。然后我检查了touches数组,也许它被多次触摸调用一次(我在模拟器上)。然后我检查了event.allTouches,瞧,有两次接触。愚蠢的我在模拟器上尝试这个,但也愚蠢的苹果调用touchesBegan一次,touches数组只包含一个元素。