触摸开始、触摸结束的iPhone/iPad标识



我正在尝试构建一个简单的多点触摸应用程序。我是iOS和objectivec/cocoa的新手。所以,若这个问题太愚蠢,请道歉。

我想知道有多少手指现在是活动的,在用户释放一些手指或所有手指后,这些手指都被释放了。我想引起注意,我需要确切地知道哪根手指被松开了。乍一看似乎一切都很容易。。。但在练习中我遇到了一个问题(

假设我同时在屏幕上放下3根手指,过了一段时间后,我又放下了第四根手指。在这种情况下,在我的UIView.m文件中被称为两个"touchesBegan"evens。在第一个事件中,我得到了触摸次数=3',在第二个事件中触摸次数将为=4'(这是正确的,因为这是一个总计数器)。所以这次事件似乎一切都很清楚。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSSet *allTouches = [event allTouches];
    NSArray *allObjects=[allTouches allObjects];
    touchCount = [NSNumber numberWithInt:[allObjects count]]; // this is my main counter of current active touches.
    NSLog(@"%d", touchCount.intValue);
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    //what I should do ????
}

让我们把屏幕分成四部分。想象一下iPad屏幕上有4个矩形。

让我们为这个矩形创建四个4布尔变量。如果我们将存储所有4个矩形的状态。默认情况下,所有变量都将为-false;

bool rectangle1 = false;
bool rectangle2 = false;
bool rectangle3 = false;
bool rectangle4 = false;

然后,当手指开始向下时,在"touchesBegan"事件中,我们更改布尔变量。我们应该改变哪个变量,我通过x-y坐标知道。假设我把手指放在2号矩形上,然后我把另一根手指放在4号矩形上。在这种情况下,变量如下:

bool rectangle1 = false;
bool rectangle2 = true;
bool rectangle3 = false;
bool rectangle4 = true;

在这之后,我将从矩形#4释放一根手指。那么,在"touchesEnded"事件中,我将如何知道这是被释放的手指,从一开始就在矩形#4区域上?

与其编写自定义代码,我强烈建议使用以下类:UIGestureRecognizer,有一些具体的实现可以实现您想要的。

UIGestureRecognizers绝对是正确的方法。我会更进一步,让每个矩形都有自己的手势识别器,或者至少有自己的touchesBegan和touchesEnded实现。

如果矩形之间需要更多的协调,那么这应该是视图控制器的工作。矩形可以根据需要通知视图控制器。

UITouch有两种方法来确定触摸的当前和以前的位置:locationInView:previousLocationInView:。这些方法提供了在对touchesMoved:withEvent:的调用之间建立触摸"身份"的唯一可靠方法。通过跟踪locationInView:返回的值,并在随后的调用中将其与previousLocationInView:返回的值进行比较,您可以明确地确定您正在查看的"哪个"触摸。

您没有提供足够的信息来确定您试图做的事情是否可以用UIGestureRecognizer来完成,但如果可以,您可能会发现它们更容易使用。

最新更新