0
我有3個手勢,需要彼此發揮很好...跨越許多不同的意見。手勢是平移/捏/旋轉。我說'很多不同的觀點',因爲我的用戶界面中有幾個按鈕可以創建形狀(視圖)。這些視圖中的每一個都應該能夠執行上述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
}
所以要重新蓋... 上面的代碼工作得很好,但是它限制了我執行手勢的加入,只有最後的/最新的形狀。我需要能夠對每個添加了「添加形狀」按鈕的形狀都做到這一點。