【发布时间】:2012-03-23 09:46:13
【问题描述】:
在我的 iphone 应用程序中,我在一个视图中做简单的图像动画,在同一个视图中我有 WebView,我在其中显示 HTML。我通过无限调用我的动画代码(animationMethodA ( WebView 动画自行启动。实际上我得到了该问题的原因。在滚动 WebView 时 time(NSTimer) 不调用 animationmethodA 方法。
请让我解决这个问题该怎么办?
谢谢。
【问题讨论】:
在我的 iphone 应用程序中,我在一个视图中做简单的图像动画,在同一个视图中我有 WebView,我在其中显示 HTML。我通过无限调用我的动画代码(animationMethodA ( WebView 动画自行启动。实际上我得到了该问题的原因。在滚动 WebView 时 time(NSTimer) 不调用 animationmethodA 方法。
请让我解决这个问题该怎么办?
谢谢。
【问题讨论】:
我终于找到了我的问题的解决方案。
我必须将计时器添加到另一个RunLoopMode,默认情况下将计时器添加到NSDefaultRunLoopMode。这意味着计时器仅在应用的运行循环位于NSDefaultRunLoopMode 时才会执行。
现在,当用户触摸屏幕(例如滚动UIScrollView)时,运行循环的模式将切换到NSEventTrackingRunLoopMode。现在,运行循环不再在NSDefaultRunMode 中,计时器将不会执行。这样做的丑陋效果是,每当用户触摸屏幕时,计时器就会被阻止。当用户滚动时,这可能会很长时间,因为计时器会被阻塞,直到滚动完全停止。而当用户继续滚动时,定时器又被阻塞了。
幸运的是,这个问题的解决方案非常简单:您可以将计时器添加到另一个NSRunLoopMode。当将计时器添加到NSRunLoopCommonModes 时,它将在所有运行循环模式下执行(准确地说,这些模式已被声明为“通用”模式集的成员)。这意味着计时器不仅在NSDefaultRunLoopMode 中工作,而且还在NSEventTrackingRunLoopMode 中工作(当用户触摸屏幕时)。
所以在你初始化你的定时器之后,把它添加到NSRunLoopCommonModes:
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
I got this answer form this link
我希望这可能对某人有所帮助......!!!
【讨论】: