11

UIPinchGestureRecognizerを使用する場合、水平方向と垂直方向のピンチスケールを個別に検出/読み取るための最良の方法は何ですか?私はこの投稿を見ました

UIPinchGestureRecognizerさまざまなxおよびy方向のスケールビュー

しかし、私は、そのような一見日常的なタスクのために行ったり来たりすることが非常に多いことに気づいたので、それが最良の答え/方法であるかどうかはわかりません。

この目的でUIPinchGestureRecognizerをまったく使用しないことが答えである場合、2つの異なる方向のピンチスケールを検出するための最良の方法は何ですか?

4

2 に答える 2

2

私のC#では、次のことを行います

    private double _firstDistance = 0;
    private int _firstScaling = 0;
    private void PinchHandler(UIPinchGestureRecognizer pinchRecognizer)
    {
        nfloat x1, y1, x2, y2 = 0;
        var t1 = pinchRecognizer.LocationOfTouch(0, _previewView);
        x1 = t1.X;
        y1 = t1.Y;
        var t2 = pinchRecognizer.LocationOfTouch(1, _previewView);
        x2 = t2.X;
        y2 = t2.Y;

        if (pinchRecognizer.State == UIGestureRecognizerState.Began)
        {
            _firstDistance = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
            _firstScaling = _task.TextTemplates[_selectedTextTemplate].FontScaling;
        }
        if (pinchRecognizer.State == UIGestureRecognizerState.Changed)
        {
            var distance = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
            var fontScaling = Convert.ToInt32((distance - _firstDistance) / _previewView.Frame.Height * 100);
            fontScaling += _firstScaling;
            _task.TextTemplates[_selectedTextTemplate].FontScaling = fontScaling;
            UpdateBitmapPreview();
        }
    }

ピンチが「始まった」ときの 2 点間の距離を計算し、その値を 2 つのプライベートに保持します。次に、最初に測定された距離と 2 番目の距離 (「変更済み」) に基づいてスケーリング (fontScaling) を計算します。私は独自のビュー (_previewView) を使用してベース (100%) に設定していますが、代わりに View.Bounds.height または幅を使用できます。私の場合、私は常に正方形のビューを持っているので、私のアプリでは高さ == 幅です。

于 2016-11-08T15:00:05.330 に答える