Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS数据结构以维护多点触摸跟踪?_Ios_Cocoa Touch_Multi Touch_Uiresponder - Fatal编程技术网

iOS数据结构以维护多点触摸跟踪?

iOS数据结构以维护多点触摸跟踪?,ios,cocoa-touch,multi-touch,uiresponder,Ios,Cocoa Touch,Multi Touch,Uiresponder,我正在尝试为我的应用程序启用多点触控手势识别。我一直在尝试维护一个数据结构,该结构将维护多个手指从开始到移动到结束的触摸生命周期中的所有点 UIResponder方法似乎只提供在特定时间点处于活动、移动或结束状态的触摸集,而移动的触摸和开始移动的触摸之间没有任何关系。有没有办法建立这种关系,或者我遗漏了什么 任何关于如何构建数据结构的想法都会很有帮助,或者关于如何在我的应用程序上获得手势跟踪的极快多点触摸响应的想法都会很有帮助 注意:我记得曾经看过一个博客,它有一个很好的方法来维护指向由多个手指

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

UIResponder方法似乎只提供在特定时间点处于活动、移动或结束状态的触摸集,而移动的触摸和开始移动的触摸之间没有任何关系。有没有办法建立这种关系,或者我遗漏了什么

任何关于如何构建数据结构的想法都会很有帮助,或者关于如何在我的应用程序上获得手势跟踪的极快多点触摸响应的想法都会很有帮助


注意:我记得曾经看过一个博客,它有一个很好的方法来维护指向由多个手指开始的触摸的指针,并使用每个手指的整数来识别它们,并使用这个方法来获得快速的多点触摸响应,但现在无法在线找到它

在这家伙的大力帮助下,我找到了一个巧妙的解决办法

最后,它是关于理解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个手指