gpt4 book ai didi

ios - bringSubviewToFront(_ :) function breaks a UIPanGestureRecognizer

转载 作者:行者123 更新时间:2023-11-29 12:07:07 25 4
gpt4 key购买 nike

我有一个 BoardView 类,它是 UIView 的子类。它有几个 subview ,它们都有自己的 UIPanGestureRecognizer。我使用此识别器在我的 BoardView 实例中拖动 subview ,如下所示:

func pieceDragged(recognizer: UIPanGestureRecognizer) {
let pieceView = recognizer.view!
if recognizer.state == .Began || recognizer.state == .Changed {
// move the pieceView by the appropriate amount
let translation = recognizer.translationInView(self)
pieceView.center = CGPoint(x: pieceView.center.x + translation.x, y: pieceView.center.y + translation.y)
recognizer.setTranslation(CGPoint.zero, inView: self)
} else if recognizer.state == .Ended {
// do something else
}
}

这很好用。

问题是我希望被拖动的 subview 位于其所有兄弟 View 之上,因此我将我的 BoardView 实例设为每个手势识别器的委托(delegate)并覆盖此函数:

override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
let pieceView = gestureRecognizer.view!
bringSubviewToFront(pieceView)
return true
}

这似乎破坏了整个手势识别器:如果我试图在 subview 周围拖动,pieceDragged(_:) 函数只被调用一次(识别器的状态为 .Began),但仅此而已。

如果我注释掉 bringSubviewToFront(pieceView),我的代码像以前一样工作 - 我可以在任何 subview 周围拖动,但它在它的一些兄弟 View 下面。

我是无知的。这里会发生什么?

最佳答案

问题是我替换了 layoutSubviews() 方法中的所有 subview (在调用 bringToFront(_:) 后自动调用)。

关于ios - bringSubviewToFront(_ :) function breaks a UIPanGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34598502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com