子视图取消了 UIPanrecognizer

问题描述

我有这个视图 -'card'- 带有 UIPanrecognizer 和一个附加到它的操作。

按预期工作。

这是操作代码

  @IBAction func swipe(_ sender: UIPanGestureRecognizer) {
        let card = sender.view!
        let point = sender.translation(in: view)
        card.center = CGPoint(x: view.center.x + point.x,y: view.center.y + point.y)
        if sender.state == .ended{
            print("dropped")
            UIView.animate(withDuration: 0.2,animations: {card.center = self.view.center})
        }
    }

但是,我的视图有几个子视图。

看起来像这样:

enter image description here

如果我在其中一个子视图上开始平移手势,该手势经常会出现错误行为。

我观察到的不当行为是,当我在视图周围拖动时,当在子视图上启动手势时,视图不会始终跟随我的手指,而是跳回 - 在看似随机的时刻和位置 - 到它的原始位置。如您所见,我在手势结束时进行记录。当视图跳回时,不会打印该日志。

我已在所有子视图上将启用用户交互设置为 false

有没有办法告诉子视图在不干扰的情况下将手势传递给视图?

解决方法

虽然这是答案,但我不确定我是否理解:

其中一个子视图“badge”有一些自动布局约束,导致了错误行为。

我删除了约束并以更周到的方式重新定义它们,问题就消失了。

我希望你们中的一些人能解释发生了什么。感谢大家的参与!

PS:现在也审查其他约束...

enter image description here