2017-02-16 10 views
0

私は、矢印を描いたり追加したりして、この矢印を変換(翻訳、回転など)できるアプリケーションを作ろうとしています。 現在のところ、私は矢印を描いてその上にすべての変形を施すことができますが、今私がしたいのは、矢印をエッジをドラッグして修正できることです。その端をドラッグしてビューを変形する(Swift)

矢印を描くには、高さ20px(矢印の太さ)と幅400(矢印の長さ)のUIViewを作成します。

func drawArrow(frame: CGRect) { 
    let thicknessArrow = 20 
    let viewHorizontalArrow = UIView() 
    viewHorizontalArrow.frame.origin = CGPoint(x: 100, y: 600) 
    viewHorizontalArrow.frame.size = CGSize(width: 400, height: thicknessArrow) 

    drawDoubleArrow(viewHorizontalArrow, startPoint: CGPoint(x: 0, y: thicknessViewWithArrow/2), endPoint: CGPoint(x: viewHorizontalArrow.frame.width, y: thicknessViewWithArrow/2), lineWidth: 10, color: UIColor.blackColor()) 

} 

その後、私はパン、ピンチ、回転ジェスチャーのおかげでUIViewを変換します。

関数 "drawDoubleArrow"は、BezierPathで矢印を作成し、それをUIViewのレイヤーに追加します。

私はこれらの説明が十分にはっきりしていることを望みます:)。

解決策を見つける手助けをしてもらえますか?

ありがとうございます!

+0

あなたが矢のためにあなたのコードを投稿してもらえますか?それを見ずに助けるのは難しいです。 – dfd

+0

あなたの答えをありがとう。私は矢印を作成する方法を追加しました(これはUIViewのレイヤーで、変換しています:) – Adz

+0

これは私が探していたものです。私は答えを掲示し、それがあなたのために働く何かでなければ私に知らせて、私はそれを削除します。 – dfd

答えて

0

UIBezierPathは、それを認識しないため、ジェスチャーで簡単に操作できません。しかし、UIViewはジェスチャーを認識できます。 CALayerの変換能力と組み合わせれば、それはhitTest()メソッドなので、あなたが望むものを達成できると思います。

// I'm declaring the layer as a shape layer, but depending on how your error thick is, you may need a rectangular one 
let panGesture = UIPanGestureRecognizer() 
var myLayer = CAShapeLayer() 

のviewDidLoad:

// I'm assuming you've created myBezierPath, an arrow path 
myLayer.path = myBezierPath.cgPath 

// Adding the pan gesture to the view's controller 
panGesture.addTarget(self, action: #selector(moveLayer)) 
self.addGestureRecognizer(panGesture) 

moveLayer:

func moveLayer(_ recognizer:UIPanGestureRecognizer) { 
    let p = recognizer.location(in: self) 

    // You will want to loop through all the layers you wish to transform 
    if myLayer.hitTest(p) != nil { 
     myLayer.position = p 
    } 
} 
関連する問題