获取手势以使用Subclassed UIButton

时间:2016-10-13 05:58:10

标签: ios uibutton swift3 subclass gesture

我有一个子类UIButton(DragButton),我希望能够执行pan / pinch / rotate。 DragButton的实例是以编程方式创建的。可能有1个,可能有20个。全部取决于用户。

我遇到了让这些子类按钮正确处理手势的问题。主要问题是没有手势触发!在DragButton类中,在awakeFromNib实例方法中,手势根本不起作用。在layoutSubviews内部,平移可以正常地进行第一次拖动,但是每次后续的保持和拖动都会使移动的速度大幅增加。 (虽然夹点和旋转在layoutSubviews中正常工作。)这几乎就像layoutSubviews在每次交互时“加倍”手势。但是awakeFromNib根本不起作用。我猜这里的新按钮还没有被取消归档。

这是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中是处理手势的方法,但我不认为我的问题在于那里。

所以回顾一下 - 我需要以编程方式实例化子类按钮(DragButton),并让它对所有3个手势做出反应。上面我的代码的问题是没有一个手势与awakeFromNib一起工作,但是他们在第一次点击时使用layoutSubviews 错误,然后每个后续的点击使平移的速度加倍(因此故障)。

0 个答案:

没有答案