【问题标题】:Multi-touch co-ordinates problem iPhoneiPhone 多点触控坐标问题
【发布时间】:2011-06-09 21:25:09
【问题描述】:

我试图在多点触控中找到两个触控的坐标。此代码在“UITouch *touch2 = ...”行上抛出一个 SIGABRT。谁能告诉我哪里出错了?

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSArray *touchArray = [touches allObjects];
    UITouch *touch1 = [touchArray objectAtIndex:0];
    UITouch *touch2 = [touchArray objectAtIndex:1];
    CGPoint firstTouch = [touch1 locationInView:self.view];
    CGPoint secondTouch = [touch2 locationInView:self.view];
}

【问题讨论】:

    标签: iphone cocoa-touch multi-touch


    【解决方案1】:

    阵列中很可能只有一次触摸。在尝试检索该索引处的对象之前,您应该检查数组是否包含索引:

    NSUInteger count = [array count];
    id obj = (count > 1)? [array objectAtIndex:1] : nil;
    id obj2 = (count > 2)? [array objectAtIndex:2] : nil;
    

    【讨论】:

    • 关于 NSArray 的这一点通常是正确的,但在@Conor 的问题中并非如此。看我的回答。
    • 不,我不想检查是否有双击。我需要找到两个手指同时点击屏幕时的坐标
    • @Conor Taylor:从人类的角度来看,他们同时击球。在机器方面,它们相隔很长时间。您将需要处理整套触摸方法,并在每一步采取相应的行动;不能保证,当触摸开始时,您实际上会报告不止一次触摸。
    【解决方案2】:

    如果要获取双击事件,需要检查每个UITouch对象的tapCount的值,而不是touches是否有两个对象。

    for (UITouch *touch in touches) {
        if (touch.tapCount==1) {
            // do something
        } else if (touch.tapCount==2) {
            // do something else
        }
    }
    

    【讨论】:

    • 不,我不想检查是否有双击。我需要找到两个手指同时点击屏幕时的坐标
    • 你需要一一检查。在 ivars 中保存状态。不能保证两种触摸都在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多