Hi,
you need to have one fsm responsible for handling touch begin and touch ended event, and that only.
Start state watch for touch begin, then you transit to another state that dispatch a "button pressed event" . you can then go to another state that watch for touch ended or canceled, from that state you transit to a another state that will dispatch the event to whatever needs to know the touch as ended. From there go back to the start state to watch again for touch begin.
If you are using touch gui event, have one on both state, the first only dispatching Touch Began and the second dispatch the same event for Touch Ended and Touch Canceled.
I have attached an fsm that works, I tested it on the device and it runs fine. This is of course not a real world bullet proof fsm, because you would need need to handle touch id and when the touche is moved outside but not released, etc, but that's beyond the scope of this thread.
Bye,
Jean