【发布时间】:2016-01-04 19:34:32
【问题描述】:
我有一个BoardView 类,它是UIView 的子类。它有几个子视图,它们都有自己的UIPanGestureRecognizer。我使用这个识别器在我的BoardView 实例中拖动子视图,如下所示:
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
}
}
这很好用。
问题是我希望被拖动的子视图位于所有兄弟视图之上,因此我将 BoardView 实例设为每个手势识别器的委托并覆盖此函数:
override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
let pieceView = gestureRecognizer.view!
bringSubviewToFront(pieceView)
return true
}
这似乎破坏了整个手势识别器:如果我尝试拖动子视图,pieceDragged(_:) 函数将被调用一次(识别器的状态为.Began),但仅此而已。
如果我注释掉 bringSubviewToFront(pieceView),我的代码会像以前一样工作 - 我可以拖动任何子视图,但它位于它的一些兄弟视图之下。
我一无所知。这里会发生什么?
【问题讨论】:
-
我刚刚重新创建了一个简单的
BoardView类,使用与您相同的两个完全相同的方法,它工作正常。这节课还有其他内容吗?
标签: ios cocoa-touch uiview uigesturerecognizer uipangesturerecognizer