Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 有人不打电话吗???或者随机被呼叫_Iphone_Multi Touch_Uitouch_Touchesbegan - Fatal编程技术网

Iphone 有人不打电话吗???或者随机被呼叫

Iphone 有人不打电话吗???或者随机被呼叫,iphone,multi-touch,uitouch,touchesbegan,Iphone,Multi Touch,Uitouch,Touchesbegan,如果我把手指从第一次触摸中抬起,那么它会很好地识别下一次触摸。只有当我持续保持第一次触地,然后尝试用不同的手指同时触碰不同的区域时。然后,它将错误地将第二次触摸注册为再次进行第一次触摸 更新这与触摸有关。在最后一次触摸结束之前,不要调用触摸键(不管你是否在最后一次触摸结束之前已经有5次触摸结束……最后一次触摸结束后,它会调用所有触摸键结束) 设置多点触控 在Interface Builder中,它是“已启用用户交互”下的“多点触摸”复选框。无论出于何种原因,只有当触摸在scrollview中时,

如果我把手指从第一次触摸中抬起,那么它会很好地识别下一次触摸。只有当我持续保持第一次触地,然后尝试用不同的手指同时触碰不同的区域时。然后,它将错误地将第二次触摸注册为再次进行第一次触摸

更新这与触摸有关。在最后一次触摸结束之前,不要调用触摸键(不管你是否在最后一次触摸结束之前已经有5次触摸结束……最后一次触摸结束后,它会调用所有触摸键结束)


设置
多点触控


在Interface Builder中,它是“已启用用户交互”下的“多点触摸”复选框。

无论出于何种原因,只有当触摸在scrollview中时,touchesEnded才会延迟。如果a)禁用滚动视图的滚动;或者b)不要使用scrollview,那么touchesEnded将立即交付

我听说有些人在哪里截获了sendEvent,但这对我来说似乎很粗略,我真的不想搞乱响应链,因为sendEvent处理了大量事件


还有其他想法吗?有没有人将UIWindow子类化,尝试以这种方式拦截触摸?非常感谢您提供的任何输入。

滚动视图有一个属性
delaysContentTouches
,默认设置为
YES
。它将延迟所有触摸事件,直到它确定滚动手势。

我知道这个问题有点老了,但我想我会将我的经验分享给任何一个偶然发现这条线索寻找答案的人,就像我刚刚遇到的一样

我已经为这个问题挣扎了几个小时,我能想到的唯一解决方案是删除我正在使用的任何UIGestureRecognitor对象

在我的设置中,我使用平移和点击识别器来捕捉这些手势,并使用touchsbegind和touchsended来处理任何标准的触摸事件。直到我删除UIGestureRecognizer对象,第二次触摸结束时才再次调用touchesEnded方法。具体而言,是pan识别器导致了这些问题

我不完全确定这是否适用于本例,但它解决了我遇到的问题。

我今天遇到了这个问题(或者更确切地说,我今天遇到了这个问题!)

我所看到的是:

  • 带手指的触摸屏1
  • 触碰引发了火灾
  • 带手指的触摸屏2
  • 触碰引发了火灾
  • 释放指2
  • 什么也没发生
  • 松开手指1
  • 触火
  • 触火
正如加文·克利夫顿(Gavin Clifton)所说,只有在添加手势识别器时才会发生这种情况。在没有添加识别器的情况下,touchesEnded会在释放每个手指后触发。这将是伟大的,如果我不需要使用识别器

我通过添加gestureRotation.delaysTouchesEnded=FALSE解决了这个问题到我的识别器创建/添加代码:

gestureRotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRotation_Callback:)];

[gestureRotation setDelegate:self];
gestureRotation.cancelsTouchesInView = FALSE;
gestureRotation.delaysTouchesEnded = FALSE;        // <---- this line!!
[self.view addGestureRecognizer: gestureRotation];
[gestureRotation release];
gestureRotation=[[UIRotationGestureRecognitizer alloc]initWithTarget:self action:@selector(gestureRotation\u回调:)];
[gestureRotation setDelegate:self];
gestureRotation.cancelsTouchesInView=FALSE;

gestureRotation.delaystouchesend=FALSE;// 我刚刚遇到了这个问题,在ScrollView中的按钮上永远不会调用
touchSended
。根据Ovidiu的回答,我发现手动设置ScrollView的ContentOffset是导致问题的原因。大概是将contentOffset设置为我原来的方式,这会让ScrollView混淆我是想按下按钮还是滚动视图


让偏移量保持在
0,0
可以解决问题。

我找到了另一种选择

触摸开始
CGPoint
未根据
触摸移动
移动后,调用
触摸取消


但是,如果
CGPoint
根据
touchesMoved
更改,则调用
touchesend

我创建了一个简单的测试项目,似乎每次举起手指时都会调用touchesEnded…Vladimir,你介意把你的代码示例发布到某个地方吗,这样我就可以看到不同之处了?无论出于何种原因,我所有的touchesEnded都会在稍后同时被调用,而不是在它们实际发生的时候。顺便说一句,在我的程序中,触摸都在滚动视图中的UIImageView上,如果这有什么不同的话,所有这些都在UIView中Vladimir,这可能与滚动视图中的所有UIImageView有关吗?在scrollview外部,他们可以立即发送touchesEnded消息,但在scrollview内部,他们不会立即发送消息。这是不是因为某种原因被延迟了,或者它没有被正确地发送到响应链上?tewha,你可能在这里走对了轨道。。。我正在代码中创建UIImageView,并在设置过程中设置MultipleTouched。出于某种原因,我不确定它是否设置正确。我在其他地方读到,如果MultipleTouchEnabled未设置为YES,则在最后一次触摸结束之前(与我的错误完全匹配!)不会调用touchesend。不过,只需检查是否已启用所有选项,并确保MultipleTouchEnabled对所有选项都是YES:(这可能与scrollview中的所有UIImageView有关吗?在scrollview之外,它们可以正常工作,但在scrollview中,它们不会立即发送消息。
gestureRotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRotation_Callback:)];

[gestureRotation setDelegate:self];
gestureRotation.cancelsTouchesInView = FALSE;
gestureRotation.delaysTouchesEnded = FALSE;        // <---- this line!!
[self.view addGestureRecognizer: gestureRotation];
[gestureRotation release];