UIView的。如何重新显示“数据驱动”UIView?

时间:2009-10-04 13:37:50

标签: cocoa-touch uiview drawrect

我正在为iPhone做一个科学的可视化应用程序。 UIView子类会定期从网络接收一些必须通过覆盖的drawRect:方法呈现的数据。

我的挑战是没有办法向Cocoa-Touch表明这个数据已经到达 - 或者已经改变 - 除了[myView setNeedsDisplay]之外,除了对UIView边界的改变之外被忽略。我试图隐藏和取消隐藏。 Nuthin'。

疯狂地说,因为我所做的只是改变了UIView [myView setNeedsDisplay]的一些内部状态。 Cocoa-Touch完全看不到这种变化。根据Cocoa-Touch的说法,这种变化不是重写的标准之一 - 因此我的UIView坐在那里,没有改变。

这非常,非常非常令人沮丧。我在这里撞墙了。

有人可以建议一种技巧,技巧,黑客,它会促使我的UIView重新渲染。

干杯, 道格

1 个答案:

答案 0 :(得分:5)

[myView setNeedsDisplay]会导致drawRect:在您下次返回运行循环时发送到myView并且myView可见。如果更改边界导致视图重绘(myView.contentModeUIViewContentModeRedraw),则setNeedsDisplay必须正常工作,因为这是边界更改发出重绘信号的方式。有关详细信息,请参阅UIView class reference

第一次显示视图时是否调用了drawRect:?如果没有,它可能会拼写错误,在子类中重写,甚至在错误的对象上重写。

视图是否可见并在屏幕上显示?如果它不在屏幕上,则不会被绘制。

控件是否返回事件循环?如果您的应用程序繁忙,则不会调用drawRect: