ios - 从触摸方法构建您自己的手势识别器?

标签 ios uikit sprite-kit

我在使用滑动手势识别器时遇到问题 - 它有时很慢并且需要一定距离才能检测到。例如,有时当您稍微移动手指时,它不会检测到。

我正在制作一个 twitch 游戏并在所有四个方向上使用手势处理我的输入,这种行为会导致各种困惑并激怒玩家。

所以我认为我需要实现自己的滑动识别器。或者也许有其他人创建的库?

到目前为止,我的想法是在 touchesBegan: 方法中存储触摸位置,然后在 touchesMoved:touchesEnded: 中检查新位置> 方法。然后我会比较距离和方向,并发射正确的方法。

这是执行此操作的正确方法还是我遗漏了什么?

最佳答案

这是一个正确的方法,但实际上并不容易。我创建了一个类来为我做类似的事情(实际上是为了抛出一个 View )。

我在这门课上所做的是生成一个点缓冲区和一个日期时间缓冲区,然后我可以用它们来计算速度、手势长度等东西……在外面看起来像这样:

@property NSInteger maximumBufferSize;
@property (readonly) CGFloat traceLength;
@property (readonly) CGPoint traceSpeed;
- (void)begin:(CGPoint)point;
- (void)push:(CGPoint)point;
- (void)end:(CGPoint)point;

使用起来非常方便。在您的情况下,beginpushend 是触摸开始、触摸移动和触摸结束(或取消)。最大缓冲区大小是它将存储的点数(即触摸接收到的最后 N 个点)。

您必须明白,如果您不想忽略任何滑动手势(例如,用户用他的手指画一个圆圈),您可能需要更多的东西。要执行此类操作,您可能需要计算跟踪的平均方式,然后比较每个子跟踪 (point[i+1] - point[i]),以便 dot(trace .averageWay, sub-trace.averageWay) = 1+-trashold.

编辑:添加源链接

Source link

关于ios - 从触摸方法构建您自己的手势识别器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23761671/

相关文章:

ios - 线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x48)

ios - 如何确定 IOS 应用程序是否使用框架/框架库

objective-c - 设置 uinavigationitem 的后退按钮不起作用

ios - Sprite 套件尺寸变更

ios - SpriteKit声音内存消耗问题

ios - 获取iOS的root权限

ios - 如何在单一 View 中添加两个 GestureRecognizer

iphone - UIScrollView 在 iPhone/iPad 上旋转时禁用滚动

ios - 使用 SnapKit 的多个 View 的等间距

objective-c - 什么是 CGVector?