注:UIWebViewはrequestAnimationFramesをサポートしていないようです。それを指摘してくれたGuillaumeGendreに感謝します!
作業中のWebアプリで同様の問題が発生しました。
私たちにとって、問題を引き起こしたのはtouchmoveでした。回避策(ここにあります:https ://gist.github.com/3755461 )を実装しましたが、別の問題によってそれを放棄せざるを得なくなるまで、かなりうまく機能しているように見えました。(私はあなたのフィドルに回避策を追加しようとしましたが、タイマーを1〜2回起動させることができましたが、一貫して再現することはほぼ不可能である奇妙なジェスチャー+スクロールイベントが必要でした。)
とにかく、開発者向けのiOS 6の新機能の1つは、requestAnimationFramesです。私の回避策は基本的にタイマーのラッパーであり、開発者がブール値を渡すことができます。ブール値は、ネイティブ関数または回避策関数のいずれかを呼び出します。
例えば:
setTimeout(function(){alert("HI")}, 1000); // using native
setTimeout(function(){alert("HI")}, 1000, true); // using workaround
回避策を使用する追加の方法は次のとおりです。
setInterval(function(){console.log("Interval")}, 1000, true);
var timer = setTimeout(function(){ /* ... */ }, 60000, true);
clearTimeout(timer);
var interval = setInterval(someFunc, 10000, true);
if(someCondition) clearInterval(interval);
回避策の例を示す2つのフィドルを次に示します。黒い四角をピンチ/ズームしてみてください。
http://jsfiddle.net/xKh5m/embedded/result(ネイティブsetTimeout
関数を使用)
http://jsfiddle.net/ujxE3/embedded/result
この回避策は実稼働環境で数か月使用しており、大きな問題は発生していません。
回避策の概要は次のとおりです:https ://gist.github.com/4180482
requestAnimationFramesの詳細は次のとおりです。
MDNドキュメント
requestAnimationFrameのポールアイリッシュ
幸運を!