2009-10-04 54 views
1

我正在为iPhone做一个科学的可视化应用程序。定期地,一个UIView子类将接收来自网络的一些数据,它必须通过其重写的drawRect:方法来呈现。UIView。我如何重新显示“数据驱动”的UIView?

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

令人难以置信的是,因为我所做的只是改变了UIView [myView setNeedsDisplay]的一些内部状态。 Cocoa-Touch完全无法看到这种变化。根据Cocoa-Touch的说法,这种改变并不是触发重绘的标准之一,因此我的UIView坐在那里,没有改变。

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

有人可能会提出一个技巧,窍门,黑客,这将提示我的UIView重新呈现。

干杯, 道格

回答

5

[myView setNeedsDisplay]应该引起drawRect:进行下一次你回来的运行循环和myView可见送到myView。如果更改边界导致视图重新绘制(myView.contentModeUIViewContentModeRedraw),则setNeedsDisplay必须正常工作,因为这是通过边界更改来指示重绘的方式。有关详细信息,请参阅UIView class reference

您的drawRect:在第一次显示视图时被调用?否则,可能会拼写错误,在子类中重写,甚至错误的对象。

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

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

+0

Will, 好吧,这很奇怪。我已经移除了对[myView setNeedsDisplay]的调用,因为它之前没有做任何事情。我把它放回去,drawRect正在射击。叹。感谢您的帮助。 – dugla 2009-10-04 16:20:15