我将一个手指先放到手机上,此时- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event可以调用。但是当我这个手指按住的同时,另外一个手指点击屏幕时,为什么不再调用- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event? 我想要知道当前我屏幕上有几个手指,不管是同时按下的(同时按下没问题),还是先后按下。大家有什么经验没。 难道就是因为一个touch已经开始了, 就不再检测其他touch了吗?
@michael 我看是你对事件了解的基本知识体系可能有些欠缺。要知道触摸事件的开始才是touchesBegan啊,你已经有一只手指按住屏幕了,说明touch的事件已经触发,所以在你按下的时候其实已经发生过began事件了;当你第二只手指再按下时,其实已经是过程中的事件,而不再是开始事件。
多指操作的事件并不是逐个手指单独发生的,如果是这样,那么这个事件处理机制也太愚蠢了,不算是真正的多点触摸。系统其实是已经在你事件发生后一直监听一个或多个手指的触摸情况,所以你其实应该在过程中判断touch的数目来检测有多少个手指操作,而且SDK本身也支持对每个touch的移动状态进行监控。而不是你所想象那样逐个手指一个事件。
9楼 @tinyfool 恩的确,my fault。这个问题解决了。但是我有个引申的问题,我来举个例子,以便大家自己写个demo看看是什么状况。知道原理的朋友可以出来讲解一下: 我写了一个简单的demo(单视图应用程序),自定义了一个view,重写了drawRect(其实只是在屏幕中间画了一条线)。然后我把它添加到ViewController的上([self.view addSubview:sView];)。然后我用拇指按住屏幕(此时ViewController的touchesBegan被调用)。然后我用食指再按住屏幕,同时保持我的拇指依然按住屏幕。此时touchesBegan不会被调用。更为奇怪的,然后我切换手指,我抬起拇指保持食指按住屏幕,用拇指点击屏幕,它有可能调用touchbegan。大家可以来回切换手指点击试试,看看打印信息就知道。 但如果我没添加改view,或者添加的是一个普通的UIView,或者在这个自定义view中设置self.userInteractionEnabled= NO,那么每个点击事件都是正常的,是没问题的。 另外我在我的viewDidLoad方法设置了self.view.multipleTouchEnabled= YES。不要考虑这个了。
大牛们,知道原理的可以给小弟讲讲,why。