My understanding is that hypeDocument.kHypeGesturePhaseEnd occurs when a touchend event was detected (the finger was released from the element being dragged) and hypeDocument.kHypeGesturePhaseCancel occurs when another event interrupts the drag but a specific finger gesture wasn’t the cause.
Listening for both events is smart because it covers all your bases – either the gesture has been intentionally exited, or something weird (like Mobile Safari detecting the beginning of a Swipe from the left, which it think means you want to go ‘Back’) has occurred.