检测 UIScreenEdgeGestureRecognizer 并使 UIPanGestureRecognizer 失败
Detect UIScreenEdgeGestureRecognizer and fail UIPanGestureRecognizer
在我的 ViewController 中,我有一个用于切换视图的 UIScreenEdgeGestureRecognizer
,还有一个带有自定义 UITableViewCell
的 UITableView
。在这个习惯中 UITableViewCell
是一个 UIPanGestureRecognizer
用于滑动单元格。
我添加了 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
以便两个手势都有效,gestureRecognizerShouldBegin
以防止垂直滚动的冲突。
问题是,如何给 UIScreenEdgeGestureRecognizer
优先权?当我在屏幕边缘滑动时,我想在不平移单元格的情况下切换视图。我想我应该使用委托方法,但到目前为止,我读得越多,我就越困惑。
自定义代码 UITableViewCell
:
override func viewDidload() {
var recognizer = UIPanGestureRecognizer(target: self, action: "handlePan:")
recognizer.delegate = self
addGestureRecognizer(recognizer)
}
override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
if let panGesture = gestureRecognizer as? UIPanGestureRecognizer {
let velocity = panGesture.velocityInView(superview!)
if fabs(velocity.x) > fabs(velocity.y) { return true }
return false
}
return false
}
ViewController:
override func viewDidLoad() {
let rightScreenEdgeRecognizer = EdgePanGesture(target: self, action: "changeView:")
rightScreenEdgeRecognizer.edges = .Right
view.addGestureRecognizer(rightScreenEdgeRecognizer)
}
我还尝试用以下方法识别识别器:
gestureRecognizer.isKindOfClass(UIScreenEdgePanGestureRecognizer)
和
gestureRecognizer as? UIScreenEdgePanGestureRecognizer
但都失败了。
结果我用 gestureRecognizer as? UIScreenEdgePanGestureRecognizer
寻找了正确的方向,但我应该使用 otherGestureRecognizer
.
而不是 gestureRecognizer
override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if let recognizer = otherGestureRecognizer as? UIScreenEdgePanGestureRecognizer {
return true
}
return false
}
在我的 ViewController 中,我有一个用于切换视图的 UIScreenEdgeGestureRecognizer
,还有一个带有自定义 UITableViewCell
的 UITableView
。在这个习惯中 UITableViewCell
是一个 UIPanGestureRecognizer
用于滑动单元格。
我添加了 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
以便两个手势都有效,gestureRecognizerShouldBegin
以防止垂直滚动的冲突。
问题是,如何给 UIScreenEdgeGestureRecognizer
优先权?当我在屏幕边缘滑动时,我想在不平移单元格的情况下切换视图。我想我应该使用委托方法,但到目前为止,我读得越多,我就越困惑。
自定义代码 UITableViewCell
:
override func viewDidload() {
var recognizer = UIPanGestureRecognizer(target: self, action: "handlePan:")
recognizer.delegate = self
addGestureRecognizer(recognizer)
}
override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
if let panGesture = gestureRecognizer as? UIPanGestureRecognizer {
let velocity = panGesture.velocityInView(superview!)
if fabs(velocity.x) > fabs(velocity.y) { return true }
return false
}
return false
}
ViewController:
override func viewDidLoad() {
let rightScreenEdgeRecognizer = EdgePanGesture(target: self, action: "changeView:")
rightScreenEdgeRecognizer.edges = .Right
view.addGestureRecognizer(rightScreenEdgeRecognizer)
}
我还尝试用以下方法识别识别器:
gestureRecognizer.isKindOfClass(UIScreenEdgePanGestureRecognizer)
和
gestureRecognizer as? UIScreenEdgePanGestureRecognizer
但都失败了。
结果我用 gestureRecognizer as? UIScreenEdgePanGestureRecognizer
寻找了正确的方向,但我应该使用 otherGestureRecognizer
.
gestureRecognizer
override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if let recognizer = otherGestureRecognizer as? UIScreenEdgePanGestureRecognizer {
return true
}
return false
}