UIKit

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 手指滑动偏移量,相对父视图坐标的位置 =
上一篇 下一篇

猜你喜欢

热点阅读