User events such as touches and device motion will be sent to the application event queue, if the user event is anything but a touch then the application will dispatch the call to the first responder, if the first responder couldn’t handle it, the system will follow the responder chain to find an appropriate responder.
For touch events the flow is different, When the system detects a touch on the screen it will send this touch to the application, the application will receive the touch event in its _touchesEvent internal method.
The application will then forward this event using sendEvent to the UIWindow, the window upon receiving this event start the process of hit-testing the views in order to find the one that received this touch.
UIView’s hitTest:withEvent will be used to find the view that is under the touch, the implementation of hit-test will check if the touch is within the view bounds, by calling pointInside:withEvent: in each view.
hitTest and pointInside will be called recursively until it reaches a top most leaf view. this view will be used as the first responder for the touch event.
UIWindow will then send the touch events to this view.