首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用touchesBegan和touchesEnded的IOS多点触控序列

使用touchesBegan和touchesEnded的IOS多点触控序列
EN

Stack Overflow用户
提问于 2012-06-27 20:07:12
回答 1查看 435关注 0票数 0

这是用于音乐ap的

用户任务是用手指1、2和3触摸和按住屏幕,两次触摸之间有一段短暂的时间。

如果用户按(1,2,3)的顺序抬起手指,那么一切都会按预期进行。因此,看起来mulitpletouchenable、userinteractionenable等标志必须是正确的。

这是一个报告(n是返回的触摸次数,x和y是位置)(我编辑了输出文件以识别手指1、2、3

代码语言:javascript
复制
    2012-06-27 07:22:36.589 Bowing[757:907]  finger 1 Began n=0,x=190, y=860
    2012-06-27 07:22:37.207 Bowing[757:907]  finger 2 Began n=0,x=346, y=704
    2012-06-27 07:22:37.875 Bowing[757:907]  finger 3 Began n=0,x=580, y=708

    2012-06-27 07:22:38.587 Bowing[757:907]  finger 1 Ended n=0,x=191, y=854
    2012-06-27 07:22:39.252 Bowing[757:907]  finger 2 Ended n=0,x=346, y=722
    2012-06-27 07:22:40.019 Bowing[757:907]  finder 3 Ended n=0,x=585, y=712

生活是美好的

如果用户以相反的顺序(3,2,1)抬起手指,那么直到手指1被抬起,才会发送消息;然后发送所有三个手指的消息

代码语言:javascript
复制
    2012-06-27 07:22:36.589 Bowing[757:907] finger 1 Began n=0,x=190, y=860
    2012-06-27 07:22:37.207 Bowing[757:907] finger 2 Began n=0,x=346, y=704
    2012-06-27 07:22:37.875 Bowing[757:907] finger 3 Began n=0,x=580, y=708

    2012-06-27 07:22:38.587 Bowing[757:907] finger 1 Ended n=0,x=191, y=854
    2012-06-27 07:22:39.252 Bowing[757:907] finger 2 Ended n=0,x=346, y=722
    2012-06-27 07:22:40.019 Bowing[757:907] finger 3 Ended n=0,x=585, y=712

生活并不是那么美好。为了反映屏幕上发生的情况,消息应该按照finger 3、finger 2和finger 1的顺序到达

下面是响应器;不管有没有给super的消息,都是一样的

代码语言:javascript
复制
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//    [super touchesBegan:touches withEvent:event];
    NSEnumerator *enumerator = [touches objectEnumerator];
    UITouch  *aTouch;
    int counter=0;
    while ((aTouch = [enumerator nextObject])) {
        /* code that acts on the set’s values */
        CGPoint  where=[aTouch locationInView:nil];
        NSLog(@"Began n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y);
        counter++;
    }

}
// Sent to the receiver when a system event (such as a low-memory warning) cancels a touch   event.
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

//    [super touchesCancelled:touches withEvent:event];
    NSEnumerator *enumerator = [touches objectEnumerator];
    UITouch  *aTouch;
    int counter=0;
    while ((aTouch = [enumerator nextObject])) {
        /* code that acts on the set’s values */
        CGPoint  where=[aTouch locationInView:nil];
        NSLog(@"Cancelled n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y);
        counter++;
    }

}

//当从视图或窗口中举起一个或多个手指时,告知接收者。

代码语言:javascript
复制
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
//    [super touchesEnded:touches withEvent:event];
    NSEnumerator *enumerator = [touches objectEnumerator];
    UITouch  *aTouch;
    int counter=0;
    while ((aTouch = [enumerator nextObject])) {
        /* code that acts on the set’s values */
        CGPoint  where=[aTouch locationInView:nil];
        NSLog(@"Ended n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y);
        counter++;
    }

}   
EN

回答 1

Stack Overflow用户

发布于 2012-07-18 23:21:00

问题是:结束的触摸正在等待所有的触摸完成,这就是为什么当它结束时,所有三个触摸都被发送。对此的解决方案可以是一个nstimer,它以1/32的时间间隔检测[touch count];,并检测它是增加还是减少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11225818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档