当我滚动WebView时,NSTimer无效

时间:2012-03-23 09:46:14

标签: scroll nstimer

在我的iphone应用程序中,我正在View中进行简单的图像动画,在同一个View中我有WebView,我在其中显示HTML.i通过对动画代码进行无限调用来完成该动画({{1我正在通过设置NSTimer来做到这一点。我的问题是当我滚动WebView然后同时动画图像停止并且动画图像保持在休息阶段(停止)直到我停止滚动webView.As i停止滚动WebView动画自动启动。实际上我得到了那个问题的原因。在滚动WebView时animationMethodA没有调用time(NSTimer)方法。

请告诉我该怎么办?

感谢。

1 个答案:

答案 0 :(得分: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

我希望这对某人有帮助...... !!!