当用户滚动UIScrollView时,如何让我的UIView重绘?

时间:2010-09-16 18:02:18

标签: iphone uiview uiscrollview

我有一个带有两个子视图的根UIView:

  1. 自定义UIView子类
  2. 一个UIScrollView
  3. 自定义UIView子类的某些状态由NSTimer更新,每N秒触发一次。更新视图的状态后,视图将调用[self setNeedsDisplay],此后不久将触发重绘。这一切都按预期工作。

    但是,每当用户滚动UIScrollView时,自定义UIView子类都不会重绘。用户触摸UIScrollView时,重绘停止发生。然后,当用户停止触摸UIScrollView并且滚动完全停止时,自定义UIView子类最终会重新绘制。

    当用户滚动UIScrollView时,有没有办法让自定义UIView子类重绘?

1 个答案:

答案 0 :(得分:1)

我更喜欢Mac方面,但我认为,因为-setNeedsDisplay: future 重绘的标志,它永远不会发生,因为滚动/触摸事件仍然会占用当前(主)循环。在这种情况下,您的计时器永远不会有机会在主runloop上触发,因为滚动尚未完成。

<强>校正

快速搜索显示,使用NSRunLoopCommonModes将计时器添加到运行循环可防止它们被暂停。这可能会为你解决问题,但你仍然可能会因“标记未来展示”与“现在绘制”而发生冲突。

另一个补充

阿。似乎this has already been answered on SO