关于手势的几个属性的记录
关于iOS的事件响应者链的关系hit-testting 寻找最佳响应者大家应该不陌生.但是找到最佳响应者之后,这个touch事件是由手势来消费还是由touch方法优先消费.可能好多人还不太清除呢.
关于这个点,苹果官方文档是有解释的,touch事件会优先交给手势识别,只有手势识别失败之后才会将touch事件交给touch方法消费.
不过很多时候这种默认的处理方式并不能完全满足我们的需求,所以系统手势有三个属性,可以改变这一个默认的行为
手势的属性
delaysTouchesBegan 属性
这个属性默认值为NO,意思就是无论touch事件是交给手势识别还是交给touch方法消费,都会调用touchBegan事件.当这个属性设置为YES的时候,系统会优先把事件交给手势,只有手势识别失败之后才会将touch事件交给touchBegan方法
delaysTouchesEnded 属性
delaysTouchesEnded 属性默认为YES,意思就是touch事件会优先由手势识别,只有手势识别失败之后才将touch事件交给touchend方法.系统这样做是为了确保手势可以取消
cancelsTouchesInView 属性
cancelsTouchesInView 默认值为Yes,意味着当手势系统识别手势成功后,回调touchCancel方法,取消touch事件的传递 .当改为NO 后系统不会回调touchCancel方法
这三个属性可以在我们处理手势和touch事件的时候加以利用,例如我们熟知的IQKeyboardManager这个框架就是利用了cancelsTouchesInView属性使得手势事件可以最后传递到它加到window上的Tap手势,从而控制键盘的起落