ピンチ

提供:MonoBook

ピンチ英語pinch)とは、日本語に訳すと「挟む」という意味であり、コンピューターの世界では主にマルチタッチにおいて2本の指を開いたり閉じたりする動作を指す。

ピンチに対応する処理はほとんどのアプリで「拡大縮小」となっている。指でクパー感は直感的でわかりやすい。

非常に稀な例だが、お絵かきソフトで「直線を引く」になっていたものもあったが、これはあまり使い勝手の良いものではなかった。

実装例[編集 | ソースを編集]

MonoGameでの実装例を示す。

bool _pinching = false;
float _pinchInitialDistance;

private void HandleTouchInput() 
{
    if (TouchPanel.IsGestureAvailable)
    {
        GestureSample gesture = TouchPanel.GetGesture();

        if (gesture.GestureType == GestureType.Pinch)
        {
            // current positions
            Vector2 a = gesture.Position;
            Vector2 b = gesture.Position2;
            float dist = Vector2.Distance(a, b);

            // prior positions
            Vector2 aOld = gesture.Position - gesture.Delta;
            Vector2 bOld = gesture.Position2 - gesture.Delta2;
            float distOld = Vector2.Distance(aOld, bOld);

            if (!_pinching)
            {
                // start of pinch, record original distance
                _pinching = true;
                _pinchInitialDistance = distOld;
            }

            // work out zoom amount based on pinch distance...
            float scale = (distOld - dist) * 0.05f;
            ZoomBy(scale);
        }
        else if (gesture.GestureType == GestureType.PinchComplete)
        {
            // end of pinch
            _pinching = false;
        }
    }
}