英语轻松读发新版了,欢迎下载、更新

多点触摸问题(已结贴)

michael 发布于 2014年01月08日 | 更新于 2014年01月09日
无人欣赏。

我将一个手指先放到手机上,此时- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event可以调用。但是当我这个手指按住的同时,另外一个手指点击屏幕时,为什么不再调用- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event? 我想要知道当前我屏幕上有几个手指,不管是同时按下的(同时按下没问题),还是先后按下。大家有什么经验没。 难道就是因为一个touch已经开始了, 就不再检测其他touch了吗?

共10条回复
tinyfool 回复于 2014年01月08日

这显然不是touchesBegan的问题了,你应该去看的是其他事件了

michael 回复于 2014年01月08日

1楼 @tinyfool 啥意思?我应该看什么事件呢?我好奇的是为什么不再调用了,难道就是因为一个touchesBegan已经开始了, 就不再检测其他touchesBegan了吗(touchesMove依然工作)?

xieweizhi007 回复于 2014年01月08日

UIVIew 有个allowMultitouch属性,你看看

michael 回复于 2014年01月08日

3楼 @xieweizhi007 这个肯定开启了,两个手指同时点击是没问题的

tinyfool 回复于 2014年01月08日

2楼 @michael 你仔细想想好么?别想当然,是现在的机制方便?还是你想像的机制方便呢?

michael 回复于 2014年01月08日

5楼 @tinyfool ??不太明白您的意思。您说的现在的机制指的是什么?

nickel 回复于 2014年01月08日

@michael 我看是你对事件了解的基本知识体系可能有些欠缺。要知道触摸事件的开始才是touchesBegan啊,你已经有一只手指按住屏幕了,说明touch的事件已经触发,所以在你按下的时候其实已经发生过began事件了;当你第二只手指再按下时,其实已经是过程中的事件,而不再是开始事件。

多指操作的事件并不是逐个手指单独发生的,如果是这样,那么这个事件处理机制也太愚蠢了,不算是真正的多点触摸。系统其实是已经在你事件发生后一直监听一个或多个手指的触摸情况,所以你其实应该在过程中判断touch的数目来检测有多少个手指操作,而且SDK本身也支持对每个touch的移动状态进行监控。而不是你所想象那样逐个手指一个事件。

michael 回复于 2014年01月08日

7楼 @nickel 你理解错了,我可没说那些,而且你说错了,自己写个demo看看,就一个viewcontroller就可以了,在viewcontroller里面打印touch事件。你试试,正常的情况下,当你第二只手指再按下时,他会不是是开始事件就知道。他肯定会调用touchesBegan,touchs count为1,event alltouchs 为2.这些我都知道的。

tinyfool 回复于 2014年01月09日

8楼 @michael 你的描述很不清不楚啊

michael 回复于 2014年01月09日

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。

登录 或者 注册