在两个方向调整视图大小?

时间:2017-03-11 12:12:38

标签: ios iphone uigesturerecognizer uipinchgesturerecognizer

在Swift中我有一个问题。我知道如何使用手势来调整视图的大小,但我想要做的是让用户在两个不同的方向上缩放矩形视图。如果我试图增加矩形的宽度,我会左右捏。如果我试图增加长度上下捏。你得到了照片。到目前为止,这是我的代码。我不确定如何将我的伪代码转换为实际代码。

func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> String {

let x_1 = p1.x
let x_2 = p2.x
let y_1 = p1.y
let y_2 = p2.y

let absolutePoint = CGPoint(x: x_2 - x_1, y: y_2 - y_1)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))

let absRad = fabs(radians)

if absRad > M_PI_4 && absRad < 3*M_PI_4 {
    return "x"
} else {
    return "y"
}
}


 func handlePinch(_ sender : UIPinchGestureRecognizer) {

    //var p1 = location(ofTouch 0,in:sender)
    //var p2 = location of touch 1

    //call function
    // if function == 'x'
    //view.transformed.scaledBy(x:sender.scale,y:1)

    //if function == 'y'
    //view.transformed.scaledBy(x:1,y:sender.scale)

    if let view = sender.view {

        view.transform = view.transform.scaledBy(x: sender.scale, y: sender.scale)

        sender.scale = 1

    }



}

1 个答案:

答案 0 :(得分:0)

这是我如何做到的。

func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> String {

let x_1 = p1.x
let x_2 = p2.x
let y_1 = p1.y
let y_2 = p2.y

let absolutePoint = CGPoint(x: x_2 - x_1, y: y_2 - y_1)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))

 let absRad = fabs(radians)

if absRad > M_PI_4 && absRad < 3*M_PI_4 {
return "x"
} else {
return "y"
}
}

func handlePinch(_ sender : UIPinchGestureRecognizer) {

    if sender.state == .changed{
        let p1: CGPoint = sender.location(ofTouch: 0, in: view)
        let p2: CGPoint = sender.location(ofTouch: 1, in: view)
        var x_scale = sender.scale;
        var y_scale = sender.scale;

        if axisFromPoints(p1,p2) == "x" {
            y_scale = 1;
            x_scale = sender.scale

        }

        if axisFromPoints(p1, p2) == "y" {
           x_scale = 1;
           y_scale = sender.scale
        }



        view.transform = view.transform.scaledBy(x: x_scale, y: y_scale)

        sender.scale = 1


    }}