iOS 数据结构维护多点触控痕迹?

Posted

技术标签:

【中文标题】iOS 数据结构维护多点触控痕迹?【英文标题】:iOS Data structure to maintain multi touch traces? 【发布时间】:2013-10-11 08:27:17 【问题描述】:

我正在尝试为我的应用程序启用多点触控手势识别。我一直在尝试维护一个数据结构,该结构将维护多个手指的触摸痕迹(触摸生命周期中从开始到移动到结束的所有点)。

UIResponder 方法似乎只给出了在特定时间点处于活动状态、正在移动或已结束的触摸集,而已移动的触摸与开始移动的触摸之间没有任何关系。有没有办法建立这种关系,或者我错过了什么?

任何关于如何进行数据结构的想法也会有所帮助,或者关于如何在我的应用程序上获得极快的多点触控响应手势跟踪的想法也会有所帮助!

注意:我记得曾经看过一个博客,它有一个简洁的方法来维护由多个手指开始的触摸指针,并使用每个手指的整数来标识它们,并使用它来获得快速的多点触控响应(无法不过现在在网上找到它!)

【问题讨论】:

【参考方案1】:

经过一番挖掘,我找到了一个巧妙的解决方案,并得到了这个人 (http://www.codedojo.com/?p=1030) 的大力帮助。

最后,它是关于了解 ios 如何处理其触摸事件。我最初不清楚的是,当触摸开始时,会创建一个 UITouch 对象,然后只要该手指向下(即使您在屏幕上移动它)iOS 使用相同的 UITouch 对象,但会更新对象基于您的操作。

这是我实现的基础,使用 codedojo 的想法,我实现了一个简单的 touchManager,它维护一个 UITouch 对象数组,并在手指从屏幕上添加或移除时更新这个数组。

因此,在任何时候,您都有一个数据结构来维护所有 UITouch 对象,您可以使用这些数据结构获取多次触摸的手指轨迹。最重要的是,您可以在代码中的任何位置使用此数据结构来非常轻松地执行必要的操作。

@interface TouchStateManager : NSObject
    NSMutableArray *touches;
 

@property(nonatomic , assign , readwrite)NSMutableArray *touches;


-(int)addTouch:(UITouch *)_touch;
-(int)getActiveTouchCount;
-(int)getFingerIdForTouch:(UITouch *)_touch;



@implementation GETouchStateManager
@synthesize touches;


-(int)getFingerIdForTouch:(UITouch *)_touch

    if(self.touches == NULL)
        self.touches = [[NSMutableArray alloc] initWithCapacity:MAX_TOUCHES];
      
    if([self.touches containsObject:_touch])
        return [self.touches indexOfObject:_touch];
     
    else
        return -1;


-(int)addTouch:(UITouch *)_touch
    if([self.touches count] == 0)
        [self.touches addObject:_touch];
        return [self getActiveTouchCount];


   else
     if(![self.touches containsObject:_touch])
         [self.touches addObject:_touch];
         return [self getActiveTouchCount];
    



return -1;


-(int)getActiveTouchCount
   DLog(@"Count : %d" , [touches count]);
   return [touches count];

这对我来说效果很好,我可以在 iPad 上追踪多达 11 个手指!

【讨论】:

以上是关于iOS 数据结构维护多点触控痕迹?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Tableview (ios 7) 上禁用多点触控

iOS 上 MonoTouch 中的多点触控

未检测到 SDL2 iOS 多点触控第二个手指向下

cocos2d3.x在android下屏蔽多点触控

android 触摸屏2点和10点的区别

多点触控与多鼠标支持