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 被子视图取消的主要内容,如果未能解决你的问题,请参考以下文章