2016-10-12 31 views
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 
} 

所以要重新蓋... 上面的代碼工作得很好,但是它限制了我執行手勢的加入,只有最後的/最新的形狀。我需要能夠對每個添加了「添加形狀」按鈕的形狀都做到這一點。

回答

0

這已解決。很容易,我所要做的只是UIView的子類。我在layoutSubviews()中添加了所有的手勢識別器。在主VC中,我只是創建了一個子類的實例,而不是UIView。這允許所有形狀被獨立控制。