繁体   English   中英

使用UIPanGestureRecognizer进行多点触控

[英]Multitouch with UIPanGestureRecognizer

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

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));

}

来自UIGestureRecogniser的苹果文档

(CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView *)视图参数touchIndex接收方维护的专用数组中UITouch对象的索引。 该触摸对象表示当前手势的触摸。 view发生手势的UIView对象。 指定nil以指示窗口。 返回值视图的局部坐标系中的一个点,用于标识触摸的位置。 如果为视图指定了nil,则该方法返回窗口基本坐标系中的触摸位置。

(NSUInteger)numberOfTouches返回值接收方维护的专用数组中的UITouch对象数。 这些对象中的每一个表示当前手势中的触摸。

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

例如:

(目标C)

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

(迅速)

    for i in 0..<panGestureRecogniser.numberOfTouches {
         let pt = recognizer.location(ofTouch: i, in: panGestureRecognizer.view)
    }

至于速度,我相信它只有一个值,并且没有办法在不编写自定义方法的情况下获得每次触摸的速度,该方法计算一系列调用中每次触摸之间的差异。 然而,无法保证每次触摸都在相同的索引处。

注意:对于最小和最大触摸次数,需要相应地设置这些触摸以获得多次触摸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM