Surface SDK と .NET 4.0 を使用してプログラムを作成しています。マルチタッチ イベントを区別する必要があり、ジェスチャを区別するのに苦労しています。
2 本の指でズームと回転を実行できるようにしたいのですが、通常、指は画面上で直線または完全な円で移動しないため、結果はズームと回転の組み合わせになります。誰かがこの問題を克服する方法を指摘できますか? 小さな偏差を無視するためにいくつかのしきい値を使用していますが、これらのしきい値は手動で微調整する必要があり、適切な値を見つけることができませんでした。
メソッドでどの種類のジェスチャを検出しonManipulationStarting
、残りを無視できると思っていましたが、画面上で 1 本の指だけでジェスチャが開始されることがあり、間違ったジェスチャを識別しています。
以下にいくつかのコードを含めます。
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);
}
誰か助けてくれませんか?ありがとう!