UIPinchGestureRecognizer在水平和垂直方向上的比例分别

时间:2012-09-10 15:37:39

标签: ios scale pinch uipinchgesturerecognizer pinchzoom

使用UIPinchGestureRecognizer时,分别在水平和垂直方向检测/读取捏缩比例的最佳方法是什么?我看过这篇文章

UIPinchGestureRecognizer Scale view in different x and y directions

但是我注意到有很多人为了这样一个看似常规的任务而来回走动,我不确定这是最好的答案/方式。

如果没有完全使用UIPinchGestureRecognizer这个目的就是答案,那么在两个不同方向检测夹点比例的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

基本上这样做,

Array
(
[row-0] => Array
    (
        [email] => alma@alma.hu
        [order_id] => Array
            (
                [0] => 14
            )

    )

[row-1] => Array
    (
        [email] => peter18.xxxx@gmail.com
        [order_id] => Array
            (
                [0] => 13
            )

    )

[row-2] => Array
    (
        [email] => peter.xxxx@outlook.com
        [order_id] => Array
            (
                [0] => 12
                [1] => 10
            )

    )

)

该函数将为您返回H,V,D ..水平,垂直,对角线。

你会用这样的......

func _mode(_ sender: UIPinchGestureRecognizer)->String {

    // very important:
    if sender.numberOfTouches < 2 {
        print("avoided an obscure crash!!")
        return ""
    }

    let A = sender.location(ofTouch: 0, in: self.view)
    let B = sender.location(ofTouch: 1, in: self.view)

    let xD = fabs( A.x - B.x )
    let yD = fabs( A.y - B.y )
    if (xD == 0) { return "V" }
    if (yD == 0) { return "H" }
    let ratio = xD / yD
    // print(ratio)
    if (ratio > 2) { return "H" }
    if (ratio < 0.5) { return "V" }
    return "D"
}

答案 1 :(得分: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();
        }
    }

当捏合“开始”时,我计算两点之间的距离,并将该值保持在两个私有中。然后我根据第一个测量距离和第二个测量距离(“更改”)计算缩放比例(fontScaling)。 我使用自己的视图(_previewView)设置为基础(100%),但您可以使用View.Bounds.height或宽度。在我的情况下,我总是有一个方形视图,所以我的应用程序中的高度==宽度。