gusture

about gesture:
当点击屏幕时会记录点击的位置为point,可以重写hitTest来获取

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        
        let view = super.hitTest(point, with: event)
        
        print("看这里 \(view), point=\(point), event=\(event)")
        
        return view
    }

系统将会从视图层最上层开始询问哪个视图可以接收这个gesture,
系统会从视图层次结构的最顶层开始调用 hitTest(:with:) 方法。这个方法的目的是确定哪个视图应该处理触摸事件,它会逐级向下查询,直到找到最合适的视图来处理触摸事件。
如果在视图层次中某个视图上添加了手势识别器,系统会调用该视图的gestureRecognizer(
:shouldReceive:)来应答,如果为false则会询问下一个view,如果为ture则停止询问,调用相关gesture的action

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapViewHandle)];
 [view addGestureRecognizer:tap];

tap.delegate = self//决定了当这个view接收到这个gesture是调用谁的 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {方法

系统通过调用 hitTest(:with:) 方法来确定哪个视图应该接收手势,然后根据每个视图的 gestureRecognizer(:shouldReceive:) 方法来决定手势是否应该被该视图处理

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if let touchedView = touch.view {
            print("gustureView看这里:Touched view: \(String(describing: touch.view)),type: \(type(of: touch.view))")
        }
        return false
    }

你可以获取到具体点击的是哪个view
所有gestureRecognizer,shouldReceive方法里面的touch.view都是由用户实际点击的view决定的,并不会因为某个view是否添加gesture或者shouldReceive方法返回了false所改变。

返回true:手势识别器将处理这个触摸事件。手势识别器将继续跟踪触摸并尝试识别手势。

返回false:手势识别器将忽略这个触摸事件。触摸事件将传递给其他视图或手势识别器处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值