作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!