接触开始时多次触摸给出错误的位置

时间:2011-12-16 22:42:20

标签: iphone objective-c ios ipad multi-touch

我目前正在使用此代码获取所有触摸的位置:

NSSet *allTouches = [event allTouches];
NSArray *allObjects=[allTouches allObjects];
for (int i=0;i<[allObjects count];i++)
{
    UITouch *touch = [allObjects objectAtIndex:i];
    CGPoint location = [touch locationInView: [touch view]];

    //Add to array....
}

在模拟器上进行测试时(现在没有iPad进行测试),它与单点触控完美配合。但是当尝试多次触摸时,第一次迭代是正确的,而第二次迭代没有给出正确的位置。

即。 第一次触摸:(536,163)正确 第二次触摸:(198,608)但应该在某处(148,345)

我觉得我应该用[touch locationInView:[touch view]]改变一些东西;给出正确的位置,但我不知道该改变什么。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

很难从一组坐标中理解这个问题而没有看到你的观点,任何子视图以及你在哪里接触,但你应该知道:

  1. [touch locationInView:aView]给出aView坐标系中触摸的坐标。也就是说,您看到的坐标相对于aView的左上角,这可能不是您所期望的。试试[touch locationInView:self],这是更常见的。

  2. 查看iOS事件处理指南的“事件和触摸”部分。如果您尝试跟踪多个触摸,通常不需要迭代该集合。 iOS处理所有这些。您可以使用属性tapCountphase来获取有关触摸是否已移动,手指数量下降等信息。

  3. 有没有帮助?