私は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」ボタンで追加されるすべての単一の図形にこれを実行できるようにする必要があります。