I think you have 2 ways to scroll through the content in which you are fighting the API.
If I understand correctly, in your current setup you have a button that starts the animation.
When you scroll this way, the animation is created and launched in another thread. During the animation, the presentation layer changes. However, the actual content offset is NOT until the animation completes.
This works fine and transparently, until when you try to animate the same property when it is already animated.
Usually in this case, you cancel the existing animations, set the frame to the presentation level (current screen position), and then apply a new animation.
However, you use the convenient method textView (setContentOffset: animated :). When you do this, you give up fine animation control in exchange for fewer lines of code.
I think that stopping scrolling can be difficult or impossible using a higher level API. This means doing what you want, at least you need to try the UIView animation block and, most likely, create a CAAnimation.
A simpler solution is to install one text scroll tool. HIG supports the use of direct manipulation on the iPhone. Even if you can easily scroll in both directions, I would recommend using the button method and just use the direct manipulation that you are currently implementing.
source share