UIKit - UIGestureRecognizer
2020-04-20 本文已影响0人
ienos
UIGestureRecognizerDelegate
/// 手势即将响应
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
/// 手势接收到 UITouch
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view?.isKind(of: UIButton.self) ?? false
}
/// 多手势是否同时响应
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
/// 手势 A 响应失败,是否响应手势 B
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
多手势冲突
假如说在一个支持上下滑动的 ScrollView 上面有一个子视图,我们在子视图上面添加了一个拖动手势 UIPanGestureRecognizer。此时,我们需要 UIPanGestureRecognier 仅支持左右滑动响应,上下滑动依然由父视图 ScrollView 响应
/// 在 UIGestureRecognizerDelegate 实现 gestrureRecognizerShouldBegin 方法
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard let panGesutureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else { return true }
let velocity = panGesutureRecognizer.velocity(in: gestureRecognizer.view?.superview!)
let translation = panGesutureRecognizer.translation(in: gestureRecognizer.view)
return abs(velocity.x) > abs(velocity.y) || abs(translation.x) > abs(translation.y)
}
属性 | 说明 |
---|---|
velocity | 手指滑动速度(每秒多少个点) |
translation | 手指滑动偏移量,相对父视图坐标的位置 = |