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

Posted

技术标签:

【中文标题】界面视图。如何重新显示“数据驱动”的 UIView?【英文标题】:UIView. How do I redisplay a "data driven" UIView? 【发布时间】:2009-10-04 13:37:49 【问题描述】:

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

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

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

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

有人可以提出一种技术、技巧、技巧,这将促使我的 UIView 重新渲染。

干杯, 道格

【问题讨论】:

【参考方案1】:

[myView setNeedsDisplay] 应该会导致drawRect: 被发送到myView 下一次你回到运行循环并且myView 是可见的。如果更改边界导致视图重绘(myView.contentModeUIViewContentModeRedraw),那么 setNeedsDisplay 必须工作,因为这就是重绘由边界变化发出的信号。详情请见UIView class reference。

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

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

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

【讨论】:

威尔,好吧,这很奇怪。我删除了对 [myView setNeedsDisplay] 的调用,因为它以前没有做任何事情。我只是把它放回去,drawRect 就开火了。叹。感谢您的帮助。

以上是关于界面视图。如何重新显示“数据驱动”的 UIView?的主要内容,如果未能解决你的问题,请参考以下文章

如何重新加载 UIView?

iOS为啥只有在重新加载UITableView后才能正确显示UIView

如何在 UIView swift 中重新加载特定的子视图?

当视图消失时,UIView动画停止,重新出现时不再恢复

IBDesignable UIViewController

UIView 背景渐变与界面生成器视图