我正在为iPhone做一个科学的可视化应用程序。 UIView子类会定期从网络接收一些必须通过覆盖的drawRect:方法呈现的数据。
我的挑战是没有办法向Cocoa-Touch表明这个数据已经到达 - 或者已经改变 - 除了[myView setNeedsDisplay]之外,除了对UIView边界的改变之外被忽略。我试图隐藏和取消隐藏。 Nuthin'。
疯狂地说,因为我所做的只是改变了UIView [myView setNeedsDisplay]的一些内部状态。 Cocoa-Touch完全看不到这种变化。根据Cocoa-Touch的说法,这种变化不是重写的标准之一 - 因此我的UIView坐在那里,没有改变。
这非常,非常非常令人沮丧。我在这里撞墙了。
有人可以建议一种技巧,技巧,黑客,它会促使我的UIView重新渲染。
干杯, 道格
答案 0 :(得分:5)
[myView setNeedsDisplay]
会导致drawRect:
在您下次返回运行循环时发送到myView
并且myView
可见。如果更改边界导致视图重绘(myView.contentMode
为UIViewContentModeRedraw
),则setNeedsDisplay
必须正常工作,因为这是边界更改发出重绘信号的方式。有关详细信息,请参阅UIView class reference。
第一次显示视图时是否调用了drawRect:
?如果没有,它可能会拼写错误,在子类中重写,甚至在错误的对象上重写。
视图是否可见并在屏幕上显示?如果它不在屏幕上,则不会被绘制。
控件是否返回事件循环?如果您的应用程序繁忙,则不会调用drawRect:
。