代码之家  ›  专栏  ›  技术社区  ›  iwasrobbed

有人故意不打电话????或随机被打电话

  •  8
  • iwasrobbed  · 技术社区  · 16 年前

    如果我把我的手指从第一次触摸上抬起,那么它就会很好地识别下一次触摸。只有当我连续按住第一次触摸,然后尝试同时用不同的手指触摸不同的区域。然后,它会错误地将第二次触摸记录为来自第一次触摸。

    更新 这与touches end在最后一次触球结束前不被调用有关(在最后一次触球结束前是否已经有5次触球结束并不重要……当最后一次触摸结束时,它会叫它们全部结束)

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
     UITouch* touch = [touches anyObject];
    
     NSString* filename = [listOfStuff objectAtIndex:[touch view].tag];
    
    // do something with the filename now
    
    }
    
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    
     ITouch* touch = [touches anyObject];
     NSString* buttonPressed = [listOfStuff objectAtIndex:[touch view].tag];
    
     // do something with this info now
    }
    
    7 回复  |  直到 8 年前
        1
  •  9
  •   Jamie Lowes    14 年前

    我今天就有了这个(或者说我今天把这个问题抛给我了!).

    我所看到的:

    • 手指触摸屏1
    • 触地开始开火
    • 手指触摸屏2
    • 触地开始开火
    • 释放指2
    • 什么都没发生
    • 松开手指1
    • 触地火灾
    • 触地火灾

    正如gavin clifton所说,只有在添加手势识别器时才会发生这种情况。在没有添加识别器的情况下,每次释放手指后触控都会触发。 如果我不需要使用识别器那就太好了…!!!!

    我通过添加 gestureRotation.DelaystoucheSended=错误; 到我的识别器创建/添加代码:

    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];
    

    现在手势起作用了,触摸开始不再排队了!

        2
  •  7
  •   iwasrobbed    16 年前

    不管出于什么原因,touchesend只有在触摸位于scrollview中时才会被延迟。如果a)禁用滚动视图;或者b)不使用滚动视图,则touchesend将立即交付。

    我听说有人截获了sendEvent,但这对我来说似乎很粗略,我真的不想搞砸响应程序链,因为sendEvent处理了很多事件。

    还有其他想法吗?有没有人尝试过用这种方式截取uiwindow的子类?如能提供任何意见,我们将不胜感激。

        3
  •  6
  •   Christian Specht    14 年前

    ScrollView有一个属性 delaysContentTouches 设置为 YES 默认情况下。它将延迟所有触摸事件,直到确定滚动姿态。

        4
  •  4
  •   Gavin Clifton    14 年前

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

    我已经在这个问题上挣扎了几个小时,我唯一能想到的解决办法就是把任何 手势识别器 我正在使用的对象。

    对于我的设置,我使用pan和tap识别器来捕捉这些手势,并使用touchestarted和touchesend来处理任何标准的触摸事件。直到我移除uigestureRecognizer对象,toucheSend方法才开始为第二个touch结尾再次调用。具体来说,是pan识别器导致了这些问题。

    我不确定这是否适用于本案,但它解决了我的问题。

        5
  •  0
  •   Christian Specht    14 年前

    集合 multipleTouchEnabled .

    在界面生成器中,它是“用户交互已启用”下的“多点触摸”复选框。

        6
  •  0
  •   Nerrolken    11 年前

    我刚遇到这个问题 touchesEnded 不会在滚动视图中的按钮上调用。基于ovidiu的回答,我发现手动设置scrollview的contentoffset导致了这个问题。可能是因为设置了contentoffset,这让scroll view混淆了我是想按下按钮还是滚动视图。

    让偏移保持在 0,0 使问题消失了。

        7
  •  0
  •   Kyle Yi    8 年前

    我找到了另一个选择。

    后 touchesBegan 和 CGPoint 未根据移动 touchesMoved , touchesCancelled 打电话。

    然而,如果 临界点 根据更改 触动 , touchesEnded 打电话。

    推荐文章