Swift - 多个视图上的相同手势集

时间:2016-10-12 01:37:52

标签: ios swift3 gesture

我有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
}

重新上限...... 上面的代码工作得很好,但它限制我只在最后/最新添加的形状上执行手势。我需要能够对使用“添加形状”按钮添加的每个形状执行此操作。

1 个答案:

答案 0 :(得分:0)

这已经解决了。很容易,我所要做的只是UIView的子类。我在layoutSubviews()中添加了所有手势识别器。在主VC中,我只创建子类的实例,而不是UIView。这允许独立控制所有形状。