1

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

我的挑战是没有办法向 Cocoa-Touch 表明此数据已到达或更改,除了 [myView setNeedsDisplay] 之外,除了对 UIView 边界的更改之外,它会被忽略。我试过隐藏和取消隐藏。努丁。

令人发指的是,因为我所做的只是改变 UIView [myView setNeedsDisplay] 的一些内部状态。这种变化对于 Cocoa-Touch 来说是完全不可见的。根据 Cocoa-Touch 的说法,这种变化不是保证重绘的标准之一,因此我的 UIView 就在那里,没有改变。

这非常非常非常令人沮丧。我在这里碰壁了。

有人可以建议一种技术,一个技巧,一个黑客,这将促使我的 UIView 重新渲染。

干杯,道格

4

1 回答 1

5

[myView setNeedsDisplay]应该会在您下次返回运行循环并且可见时drawRect:被发送到。如果更改边界导致视图重绘(is ),则必须正常工作,因为这就是重绘由边界变化发出的信号。有关详细信息,请参阅UIView 类参考myViewmyViewmyView.contentModeUIViewContentModeRedrawsetNeedsDisplay

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

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

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

于 2009-10-04T15:28:38.940 回答