我正在使用GestureRecognizer
来检测拖动和捏合手势。
ManipulationStarted
,ManipulationUpdated
和ManipulationCompleted
事件提供了捏合和拖动所需的平移和缩放值。
但是我无法弄清楚如何区分拖动(1个触摸点)和捏合(2个触摸点)手势。没有关于GestureRecognizer
中接触点数量的信息。
如何使用GestureRecognizer
?
答案 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
事件结尾处的列表以及任何手势结束时发生的任何事件(例如PointerReleased
,PointerCanceled
和{{ 1}})。也许最好确保在PointerCaptureLost
事件中清除列表。也许你可以尝试一下,看看它对你有什么用。
在ManipulationStarted
事件中,您可以检查列表中是否包含2个元素(PointerIds)。如果是这样,那么你知道它是一个捏/缩放。
以下是它的样子:
ManipulationCompleted