Reputation: 4932
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. :-)
Upvotes: 2
Views: 230
Reputation: 4932
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.
Upvotes: 1