获取手势以使用Subclassed UIButton

我有一个子类的UIButton(DragButton),我希望能够执行平移/捏或旋转。 DragButton的实例是以编程方式创build的。 可能有1个,可能有20个。全部取决于用户。

我正在遇到问题,让这些子类button正确地使用手势。 主要的问题是没有一个手势触发! 在DragButton类中,在awakeFromNib实例方法中,手势完全不起作用。 在layoutsubviews中,平移正常工作的第一个拖动,但每一个后续的持有和拖动增加运动的速度相当数量。 (尽pipe在layoutSubviews中捏合和旋转工作正常)。这几乎就像layoutSubviews是在每次交互中“加倍”手势一样。 但是awakeFromNib根本不起作用。 我的猜测是新的button还没有被取消存档。

这里是DragButton中的代码

class DragButton: UIButton, UIGestureRecognizerDelegate { override func awakeFromNib() { let panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.draggedView(_:))) let pinchRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(self.pinchedView(_:))) let rotateRecognizer = UIRotationGestureRecognizer(target: self, action: #selector(self.rotatedView(_:))) panRecognizer.delegate = self pinchRecognizer.delegate = self rotateRecognizer.delegate = self self.isUserInteractionEnabled = true self.isMultipleTouchEnabled = true self.addGestureRecognizer(panRecognizer) self.addGestureRecognizer(pinchRecognizer) self.addGestureRecognizer(rotateRecognizer) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { superview?.bringSubview(toFront: self) } 

在DragButton中也是处理手势的方法,但是我不认为我的问题在于那里。

所以总结 – 我需要一个子类button(DragButton)以编程方式实例化,并对所有3个手势做出反应。 我的代码上面的问题是没有一个手势与awakeFromNib一起工作,然而他们在layoutSubviews在第一个水龙头上的工作误,然后每一个后来的水龙头双打的速​​度(因此是错误)。