GestureRecognizer中的接触点数量

时间:2012-09-28 18:35:51

标签: windows-8 touch windows-runtime windows-phone

我正在使用GestureRecognizer来检测拖动和捏合手势。

ManipulationStartedManipulationUpdatedManipulationCompleted事件提供了捏合和拖动所需的平移和缩放值。

但是我无法弄清楚如何区分拖动(1个触摸点)和捏合(2个触摸点)手势。没有关于GestureRecognizer中接触点数量的信息。

如何使用GestureRecognizer

区分拖拽和捏合

2 个答案:

答案 0 :(得分:2)

我现在几个小时一直在努力解决同样的问题,看起来WinRT平台没有提供。它提供的是Delta.Rotation和Delta.Scale值以及带有ManipulationUpdated回调参数的Delta.Translation。

如果Delta.Rotation为0(或非常接近于零 - 因为它是一个浮点值)并且Delta.Scale是1(或非常接近1),您可以得出结论捏操作不是这种情况并且正在进行拖动操作,否则它是一个捏合操作。它不是你能得到的最好的,但它看起来是目前唯一的可用性。

答案 1 :(得分:2)

嗯,我觉得它非常hacky(因为大多数解决方案似乎是一个可用的WinRT应用程序)但你可以创建一个List<uint>来跟踪屏幕上当前关闭的指针数量。您必须处理PointerPressed事件,无论您正在与哪个控件进行交互(假设您使用的是Canvas),以便在按下它们时“捕获”指针。这是您填充List<uint>的地方。不要忘记清除ManipulationCompleted事件结尾处的列表以及任何手势结束时发生的任何事件(例如PointerReleasedPointerCanceled和{{ 1}})。也许最好确保在PointerCaptureLost事件中清除列表。也许你可以尝试一下,看看它对你有什么用。

ManipulationStarted事件中,您可以检查列表中是否包含2个元素(PointerIds)。如果是这样,那么你知道它是一个捏/缩放。

以下是它的样子:

ManipulationCompleted