2012-05-15 124 views
2

我正在尝试为我的视图实现UIPanGestureRecognizer。我如何添加多点触控?下面是我的观点(UIView的一个子类)的代码。我希望能够同时知道所有触摸的位置和速度。当前的代码只打印一次触摸的位置和速度。更改属性minimumNumberOfTouches和maximumNumberOfTouches不起作用。非常感谢您的帮助。使用UIPanGestureRecognizer进行多点触摸

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; 
panGestureRecognizer.cancelsTouchesInView = NO; 
[self addGestureRecognizer:panGestureRecognizer]; 


- (void)handlePanGesture:(UIPanGestureRecognizer *)panGestureRecognizer 
{ 
    CGPoint location = [panGestureRecognizer locationInView:panGestureRecognizer.view]; 
    CGPoint velocity = [panGestureRecognizer velocityInView:panGestureRecognizer.view]; 

    NSLog(@"Location: %@", NSStringFromCGPoint(location)); 
    NSLog(@"Velocity: %@", NSStringFromCGPoint(velocity)); 

} 

回答

9

从苹果文档UIGestureRecogniser

(CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView的*)视图 参数 touchIndex 一个UITouch对象的一个​​索引由接收器维护的私有阵列。此触摸对象代表当前手势的触摸。 view 手势发生的UIView对象。指定nil来指示窗口。 返回值 标识触摸位置的本地坐标系视图中的一个点。如果为视图指定nil,则该方法返回窗口基本坐标系中的触摸位置。

(NSUInteger)numberOfTouches 返回值 UITouch对象在由接收器维持的私有阵列的数目。这些对象中的每一个表示当前手势中的触摸。

讨论 使用此方法在循环中返回的值,可以使用locationOfTouch:inView:方法询问各个触摸的位置。

例如:

for(int i=0; i<[panGestureRecogniser numberOfTouches]; i++) 
{ 
    CGPoint pt = [panGestureRecogniser locationOfTouch:i inView:self]; 
} 

至于速度,我相信只有一个为它的价值和有没有办法让每个触摸的速度而无需编写计算差值自定义方法在每次触摸之间通过一系列的通话。但不能保证触摸每次都会处于相同的索引。

注意:至于触摸的最小和最大数量,这些都需要相应地设置以获得多个触摸。

+0

非常感谢您的帮助。使用for循环,所有触摸的位置都可以正确打印出来。我尝试在循环中添加速度代码,并为所有触摸获得相同的速度。你建议写一个自定义方法。你能不能给我一些关于该方法的指导?谢谢! – HappyAppDeveloper

+0

你必须自己实现它,但我想你可以将所有的pts存储在一个名为lastPts的数组中,也可以将它们存储在另一个变量中。然后,当你得到你的下一个句柄给你打电话时,你可以计算出从上一次呼叫到这一段所花费的时间。尽管如此,并不能保证触摸会以相同的顺序进行。 –