I want to know when a user is touching the screen but not moving. Doing it in a pseudo fashion is simple enough – I know how many touches I have just by using touchesBegan and touchesEnded, but the problem is that only touchesMoved sends events. No events are sent if you aren’t moving. This is being used to have a nice sliding scroll – you can fling the scrolling and it will continue to scroll even after you’ve released, but it will immediately stop if your finger is down but not moving. I can’t just set a fingerDown boolean in touchesMoved and then set it false in my loop (where the scrolling and sliding is happening), because they’re not synchronized.
Basically, I want to simulate having a touchesNotMoved event – whenever you are moving, a certain bool is true, when you’re not moving, it’s false.
Also please don’t ask me why I’m not just using Apple’s scrolling – there’s a good reason that has nothing to do with this question. 🙂
This isn’t the answer to knowing when touches aren’t active, but it is a reasonable solution to what I wanted to do, anyway.
So, if anyone else is trying to simulate Apple’s scroll views (pixel-perfect scrolling plus a nice fling and slide), then you will want the following:
An integer keeping track of the number of touches.
A loop or timer that is separate from the touch events.
A vector (or two floats) storing a scroll “decay” amount.
A constant float decay value, like 0.95.
Then with those you can do the following:
– In touchesBegan, increment touchCount by [touches count].
– In touchesEnded, decrement touchCount by [touches count].
– In touchesMoved, create a vector that represents currentTouchPos – previousTouchPos.
– Scroll your view by that vector.
– Set your scrollDecay vector equal to that vector.
– In your main timer or loop, scroll your view by the scrollDecay only if touchCount <= 0. In addition, multiply the scrolLDecay vector by the decay value. Once it reaches a very low value (say, 0.1), set it to 0.
And you’re done. It works quite well, I can’t see any discernible differences between this and Apple’s scrolling.