处理 Iphone 上的触摸

Posted

技术标签:

【中文标题】处理 Iphone 上的触摸【英文标题】:Handling touches on Iphone 【发布时间】:2010-07-22 06:06:30 【问题描述】:

我在处理我的应用中的触摸时遇到了一点问题。

我的 touchesBegan 设置如下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    UITouch *currentTouch = [[event allTouches] anyObject];
    touchPoint = [currentTouch locationInView:self.view];
    if (CGRectContainsPoint(image1.frame, touchPoint)) 
        image1IsTouched = YES;
    

然后我像这样设置我的触摸动作:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
  
    UITouch *currentTouch = [[event allTouches] anyObject];
    currentPoint = [currentTouch locationInView:currentTouch.view];

    if(image1IsTouched == YES) 
        image1.center = CGPointMake(currentPoint.x,currentPoint.y);
        .....
    

现在我在实际单元上尝试了我的应用程序,这就是我注意到我的问题的地方。当我用一根手指触摸 image1 时,应用程序运行正常,并且每次我拖动手指时都会检查碰撞。当我在触摸/拖动图像时用另一根手指触摸屏幕时会出现问题。我当前触摸的图像将跳转到另一个手指。我试过[myView setMultipleTouchEnable:NO]; 和在触摸上使用NSArray 并将[touches count] 与触摸进行比较,但它不起作用。有人可以告诉我如何将 uiimageview 设置为仅在单次触摸时操作。谢谢。

【问题讨论】:

【参考方案1】:

首先,您应该使用UITouch *currentTouch = [touches anyObject]; 来获取当前触摸。

其次,您应该检查touches.count == 1 以确保屏幕上只有一根手指,如果多根手指则忽略触摸输入,除非您想支持多点触控。

【讨论】:

你的意思是我应该使用“UITouch *currentTouch = [touches anyObject];”而不是“UITouch *currentTouch = [[event allTouches] anyObject];”无论如何,两者有什么区别?对不起一些菜鸟问题:)。 哇,我刚刚测试了它,它运行良好。非常感谢。 :) [event allTouches] 获取屏幕上的所有手指,甚至是您视野之外的手指。当您想确保获得所有触感时,它非常有用,即使是杂散的触感。 是的,我是在 iTunes 上观看 iphone 编程视频后知道的。无论如何感谢您的帮助,非常感谢。

以上是关于处理 Iphone 上的触摸的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 检测地图图像上的触摸

查询当前屏幕上的触摸次数而不使用 iPhone 上的事件

移动触摸设备(iPhone、Android、Windows)上的悬停效果

悬停 CSS 上的 iPad/iPhone 触摸事件

单击触摸设备 (iPad/iPhone) 上的任意位置以隐藏由 .hover() 切换的下拉菜单

在 iPhone 上处理多次触摸