我正在使用Surface SDK和.NET 4.0编写程序。我必须区分多点触控事件,而且我无法区分手势。
我想用两根手指进行缩放和旋转,但由于手指一般不会在屏幕上以直线或完美的圆圈移动,因此结果是缩放和旋转的组合。有人能指出如何克服这个问题吗?我使用一些阈值来忽略小偏差,但这些阈值需要手动调整,我找不到合适的价值。
我在想我可以在onManipulationStarting
方法中检测出哪种手势并忽略其余的手势,但有时手势可以从屏幕上只有一根手指开始,我正在识别错误的手势。
我在下面提供了一些代码:
private void OnManipulationDeltaHandler(object sender, ManipulationDeltaEventArgs mdea)
{
var zoomAmount = Math.Abs(mdea.DeltaManipulation.Scale.Length - Math.Sqrt(2));
// ZOOM ACTION: 2 fingers and scaling bigger than a threshold
if ((TouchesOver.Count() == 2) && (zoomAmount > scaleThreshold))
{
if (ZoomCommand != null)
{
if (Math.Abs(zoomAmount - 0) > 0.1)
{
ZoomCommand.Execute((-zoomAmount).ToString());
}
}
}
else
{
var rotateAmount = -mdea.DeltaManipulation.Rotation;
if ((TouchesOver.Count() == 2))
{
headValue += rotateAmount;
if (HeadRotationCommand != null)
{
HeadRotationCommand.Execute(new Orientation(pitchValue, headValue, rotateAmount));
}
}
}
mdea.Handled = true;
base.OnManipulationDelta(mdea);
}
有人可以帮忙吗?谢谢!