2017-03-11 10 views
1

私は質問があります。私は一般的にジェスチャーを使ってビューのサイズを変更する方法を知っていますが、私がしようとしているのは、ユーザーが2つの異なる方向に長方形のビューを拡大するようにすることです。私が長方形の幅を広げようとしているなら、私は左右につまみます。私は長さを上下にピンチを増やそうとしている場合。あなたは写真を手に入れます。ここまでは私のコードです。疑似コードを実際のコードに変換する方法がわかりません。ビューを2方向にサイズ変更しますか?

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 

    } 



} 
+0

https://github.com/zedoul/ZDStickerView。あなた自身のコントロールを書くのではなく、この1つを使用してください –

答えて

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 


    }} 
関連する問題