hitTest方法,简而言之,就是给定一个点,返回一个view或layer,判定当前是哪一个view或layer被点中了
原理
当用户触摸屏幕的时候,系统会依次调用view层次中各个子view的hitTest方法,来判断当前是哪个view被点中,决定谁是first responder。关于这点,这篇文章总结得不错:iOS事件分发机制(一) hit-Testing
默认的实现就是触摸点是否在此view的范围内,开发者可以重写此方法,来实现不同的逻辑。具体来说有2种常见的场景
重写UIView的hitTest方法
比如为了扩大某个view的点击区域,就可以用这个方法
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
let (x, y) = (bounds.maxX - point.x, bounds.maxY - point.y)
let r &