今天尝试对 UIButton的各个事件进行了一番触发以了解各事件触发的时机,一个长久以来的疑惑再次浮出水面,此疑惑始于现象:在按钮上按下,并向外拖拽,在手指已经完全拖出按钮范围之后,仍然在不断触发 UIControlEventTouchDragInside, 且在向外拖行很长一段距离(stackoverflow上的数据是大约100px)之后,才触发UIControlEventTouchDragExit(其间会触发UIControlEventTouchDragOutside)
大致原因是touch的这块extra area是控件的内建属性,用来消弭使用手指与界面进行交互的不精确性。要实现对这块extra area的区域的自定义,需要派生 UIControl 并重载 (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event以及 (BOOL)continueTrackingWithTouch:(UITouch*)touch withEvent:(UIEvent*)event,上stackoverflow看看解决方案吧
另外在调的过程中发现另一个有趣的问题,那就是如果UIButton的父View为占满整个屏幕的View,不会触发UIControlEventTouchDragExit。。。