美文网首页UIKit
UIKit - UIGestureRecognizer

UIKit - UIGestureRecognizer

作者: ienos | 来源:发表于2020-04-20 00:54 被阅读0次

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

相关文章

网友评论

    本文标题:UIKit - UIGestureRecognizer

    本文链接:https://www.haomeiwen.com/subject/npunbhtx.html