The run loop passes touch events to the UIApplication object, which converts them into UIEvents and dispatches them via sendEvent(_:) to the relevant UIWindow for the active scene. The window, in turn, dispatches the event to a UIView, determining the target via hit testing.
The UIWindow forwards the UIEvent to the target view, firing the touchesBegan(_:with:) method, or other appropriate UIResponder method. Now that we’re no longer mucking about inside subterranean system internals, we might as well demonstrate with a nice visual example to make the most of the light of day.
Let’s create a custom skeuomorphic 3D button by subclassing UIView, complete with the aforementioned UIResponder methods:

When a user touches down, it presses in. Just like a real button should. No liquid glass nonsense here.
The full pipeline just ran before your eyes. Back up.
To understand what happens after your tap event is registered, we should clarify that UIViews in UIKit are ultimately backed by Core Animation CALayers.
Read Touch to Pixels: UI Pipeline Internals on iOS right here ⚙️
blog.jacobstechtavern.com/p/…