I encountered the same issue and was able to resolve it with the following solution:
var disableScroll = false;
var scrollPos = 0;
function stopScroll() {
disableScroll = true;
scrollPos = $(window).scrollTop();
}
function enableScroll() {
disableScroll = false;
}
$(function(){
$(window).bind('scroll', function(){
if(disableScroll) $(window).scrollTop(scrollPos);
});
$(window).bind('touchmove', function(){
$(window).trigger('scroll');
});
});
The touch move event is bound to the window since the window scroll event is not triggered until the touch move is completed. This results in a smoother experience on iOS devices.
While this solution may not be perfect and allows for page 'throwing,' it will return to the desired position once the throw is complete. iOS browsers tend to strip out certain events for performance reasons, and functions like setTimeout and setInterval do not fire during page throws.
For a demonstration, you can visit http://jsfiddle.net/8T26k/