2012-03-23 13 views
0

私のiPhoneアプリケーションでは、Viewで単純なイメージアニメーションを行い、同じビューでWebViewを表示していますが、HTML.iが無限呼び出しを行うことでそのアニメーションを行っています私のアニメーションコード(animationMethodA)の私は、NSTimer.Myを設定することでこれをやっています。問題は、WebViewを同時にスクロールするときです。アニメーションイメージが停止し、アニメーションイメージが残りのステージ(停止)に残ります。私はWebViewのスクロールをやめます。アニメーション自体が起動します。実際には、その問題の理由があります.WebViewをスクロールするときにtime(NSTimer)animationmethodAメソッドと呼ばれません。NSTimerが機能しないWebViewをスクロールすると

私にその問題について何をすべきか教えてください。

ありがとうございました。

答えて

1

最後に私は自分の質問の解決策を得ました。

RunLoopModeにタイマーを追加する必要があります。デフォルトでは、NSDefaultRunLoopModeにタイマーが追加されています。これは、アプリの実行ループがNSDefaultRunLoopModeにあるときだけタイマーが実行されることを意味します。

ここで、ユーザが画面に触れると(例えばUIScrollViewをスクロールする)、実行ループのモードはNSEventTrackingRunLoopModeに切り替わります。そして今、実行ループはもうNSDefaultRunModeにはなく、タイマーは実行されません。その醜い効果は、ユーザーが画面に触れるたびにタイマーがブロックされることです。また、スクロールが完全に停止するまでタイマーがブロックされるため、ユーザーがスクロールしている間は長時間かかることがあります。ユーザーがスクロールを続けると、タイマーは再びブロックされます。

この問題の解決策は非常に簡単です。タイマーを別のNSRunLoopModeに追加することができます。タイマーをNSRunLoopCommonModesに追加すると、すべての実行ループモード(正確には、「共通」モードのセットのメンバーとして宣言されている)で実行されます。つまり、タイマーはNSDefaultRunLoopModeで動作しているだけでなく、NSEventTrackingRunLoopMode(ユーザーが画面に触れたとき)にも働いています。

だから、あなたはあなたのタイマーを初期化した後、NSRunLoopCommonModesに追加します。

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

I got this answer form this link

が、私はこれが誰かの役に立つかもしれない願っています... !!!

関連する問題