我有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
}
重新上限...... 上面的代码工作得很好,但它限制我只在最后/最新添加的形状上执行手势。我需要能够对使用“添加形状”按钮添加的每个形状执行此操作。
答案 0 :(得分:0)
这已经解决了。很容易,我所要做的只是UIView的子类。我在layoutSubviews()中添加了所有手势识别器。在主VC中,我只创建子类的实例,而不是UIView。这允许独立控制所有形状。