iPhone / iPad的标识有touchBegin,touchEnd

时间:2012-02-09 17:41:10

标签: ios multi-touch

我正在尝试构建具有多重触摸功能的简单应用。我是iOS和objectivec / cocoa的新手。如果问题太愚蠢,请抱歉。

我想知道有多少手指现在活动,并且在用户释放一些手指或所有被释放的手指后。我想要注意,我需要知道哪个手指被释放了。在第一眼看来似乎一切都很容易......但在练习中我遇到了问题(

假设我在屏幕上同时放下3个手指,过了一段时间后我放了第四根手指。在这种情况下,在我的UIView.m文件中被称为两个'touchesBegan'平均值。 在第一个事件中,我得到了触摸次数= 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 ????
}

我们将屏幕分为4个部分。想象一下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矩形区域?

3 个答案:

答案 0 :(得分:1)

我强烈建议不要编写自定义代码,而是使用这些类:UIGestureRecognizer,有实现你想要的具体实现。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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