2016-10-12 17 views
0

私は3つのジェスチャーを持ち、お互いにうまくいく必要があります。ジェスチャーはパン/ピンチ/回転です。 UIに複数のボタンがあり、形状(ビュー)が作成されているため、「さまざまなビューがあります」と言います。これらのビューのそれぞれは、上記の3つのジェスチャーを実行できる必要があります。スウィフト - 複数のビューでのジェスチャーの同じセット

私が直面している問題は、ジェスチャーが追加された最新の形状(ビュー)で正しく動作することです。 1つの図形を追加し、それを回転して移動した後、図形2を追加すると、図形1は「ロックされ」、相互作用できなくなります。 (但し2 がで相互作用可能な形状。)

私のコードは、以下である:

var panRecognizer:UIPanGestureRecognizer! 
var pinchRecognizer:UIPinchGestureRecognizer! 
var rotateRecognizer:UIRotationGestureRecognizer! 

のviewDidLoad:

panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.draggedView(_:))) 
    pinchRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(self.pinchedView(_:))) 
    rotateRecognizer = UIRotationGestureRecognizer(target: self, action: #selector(self.rotatedView(_:))) 
    panRecognizer.delegate = self 
    pinchRecognizer.delegate = self 
    rotateRecognizer.delegate = self 
    shapeView.isUserInteractionEnabled = true 
    shapeView.isMultipleTouchEnabled = true 

形状ボタンを追加します。

// some code comprising the shapes. not relevant to issue 
    shapeView.addGestureRecognizer(panRecognizer) 
    shapeView.addGestureRecognizer(pinchRecognizer) 
    shapeView.addGestureRecognizer(rotateRecognizer) 
    shapeView.backgroundColor=UIColor.green 

    self.mainView.addSubview(shapeView) 

方法ジェスチャー

再キャップに... 上記のコードは正常に動作します
func draggedView(_ sender:UIPanGestureRecognizer){ 
    let translation = sender.translation(in: self.view) 
    sender.view?.center = CGPoint(x:(sender.view?.center.x)! + translation.x, y:(sender.view?.center.y)! + translation.y) 
    sender.setTranslation(CGPoint.zero, in: self.view) 
} 
func pinchedView(_ sender:UIPinchGestureRecognizer){ 
    sender.view?.transform = (sender.view?.transform)!.scaledBy(x: sender.scale, y: sender.scale) 
    sender.scale = 1.0 
} 
func rotatedView(_ recognizer:UIRotationGestureRecognizer){ 
    shapeView.transform = recognizer.view!.transform.rotated(by: recognizer.rotation) 
    recognizer.rotation = 0 
} 

だから、しかし、それが追加されただけで、最後の/最新の形状にジェスチャーを実行するに私を制限します。 「Add Shape」ボタンで追加されるすべての単一の図形にこれを実行できるようにする必要があります。

答えて

0

これは解決されました。簡単に言えば、私がしなければならなかったのはUIViewのサブクラスでした。私はlayoutSubviews()にすべてのジェスチャ認識機能を追加しました。 Main VCでは、UIViewの代わりにサブクラスのインスタンスを作成するだけです。これにより、すべての形状を独立して制御することができます。

関連する問題