Swift:你如何使用 UIPanGestureRecognizer 获得每次触摸的速度?

Posted

技术标签:

【中文标题】Swift:你如何使用 UIPanGestureRecognizer 获得每次触摸的速度?【英文标题】:Swift: How do you get the velocity for each touches with UIPanGestureRecognizer? 【发布时间】:2020-03-26 21:05:51 【问题描述】:

我想使用UIPanGestureRecognizer 获得每次触摸的速度,就像您可以使用方法location(ofTouch: Int, in: UIView) 处理触摸位置一样。但是,当我使用方法velocity(in: view) 时,它只返回触摸速度之一。我尝试更改 maximumNumberOfTouches 属性,但没有成功。

有什么方法可以实现吗?

【问题讨论】:

【参考方案1】:

好的,所以我通过创建一个名为 touchLocations 的二维数组 CGPoint 和另一个名为 touchVelocitiesCGPoint 数组来解决这个问题。在循环所有触摸的 for 循环中,我添加了

if !touchLocations.indices.contains(touchNumber) 
    touchLocations.append([CGPoint]())

touchLocations[touchNumber].append(sender.location(ofTouch: touchNumber, in: view))

为每次触摸分配一个新的CGPointtouchNumber 是触摸的索引,sender 是手势识别器)。

然后我添加了

touchLocations[touchNumber] = touchLocations[touchNumber].suffix(2)

这样数组只包含最后2个元素。

为了获得速度,我只是做了

touchVelocities.insert(CGPoint(x: touchLocations[touchNumber].last!.x - touchLocations[touchNumber].first!.x, y: touchLocations[touchNumber].last!.y - touchLocations[touchNumber].first!.y), at: touchNumber)

(从第二个 x 值中减去第一个 x 值作为 x 速度,对 y 速度做了同样的事情)

我知道这种方法不是很准确,但是对于我的目的来说已经足够了。

【讨论】:

以上是关于Swift:你如何使用 UIPanGestureRecognizer 获得每次触摸的速度?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:你如何使用 UIPanGestureRecognizer 获得每次触摸的速度?

你如何在 swift 中使用 reduce(into:)

使用 swift 和 spritekit,你如何阻止场景在变得活跃/移动到前台后取消暂停?

如何使用 swift 在谷歌地图中更改我的位置按钮的位置

如何在 Playground 中使用 Swift 包管理器

当一个 UIButton 被点击时,你如何让它变大,然后使用 Swift 3 回到以前/正常的大小?