【问题标题】:NSTimer not worked When I scroll The WebView当我滚动 WebView 时,NSTimer 不起作用
【发布时间】:2012-03-23 09:46:13
【问题描述】:

在我的 iphone 应用程序中,我在一个视图中做简单的图像动画,在同一个视图中我有 WebView,我在其中显示 HTML。我通过无限调用我的动画代码(animationMethodA ( WebView 动画自行启动。实际上我得到了该问题的原因。在滚动 WebView 时 time(NSTimer) 不调用 animationmethodA 方法。

请让我解决这个问题该怎么办?

谢谢。

【问题讨论】:

    标签: scroll nstimer


    【解决方案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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2014-01-06
      相关资源
      最近更新 更多