UIpanrecognizer 被子视图取消

Posted

技术标签:

【中文标题】UIpanrecognizer 被子视图取消【英文标题】:UIPanrecognizer cancelled by subviews 【发布时间】:2021-05-26 15:42:11 【问题描述】:

我有这个视图 -'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)
        
    

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

看起来像这样:

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

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

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

有没有办法告诉子视图将手势传递给视图而不干扰?

【问题讨论】:

您需要在帖子中添加更多详细信息,说明您的代码在做什么,以及 "misbehaves" 是什么意思。理想情况下,minimal reproducible example. 你在使用自动布局吗? @matt 我正在使用自动布局。这能说明问题吗? 可能。您正在更改中心,但约束仍然说使用旧中心。 不知何故,这只发生在子视图上,而不是视图本身。但是我应该如何将“真实”中心与约束中心分离?不管它是如何存在的,中心不就是一个中心吗? 【参考方案1】:

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

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

我去掉了约束,用更周到的方式重新定义,问题就消失了。

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

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

【讨论】:

以上是关于UIpanrecognizer 被子视图取消的主要内容,如果未能解决你的问题,请参考以下文章

FXCop 规则接口方法应该可以被子类型调用

Heroku dyno 如何在被子下睡觉和醒来?

winform主窗体被子窗体影响而缩小?

当子元素需要相对父元素定位时,父元素无法被子元素撑大该怎么办

java小白训练营day04-流程控制:分支判断+循环迭代

水杯测试用例