界面视图。如何重新显示“数据驱动”的 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.contentMode
是 UIViewContentModeRedraw
),那么 setNeedsDisplay
必须工作,因为这就是重绘由边界变化发出的信号。详情请见UIView class reference。
您的drawRect:
是否在第一次显示视图时被调用?如果不是,它可能拼写错误、在子类中被覆盖,甚至在错误的对象上。
视图是否可见并在屏幕上?如果不在屏幕上,则不会绘制。
控制是否返回到事件循环?如果您的应用程序繁忙,drawRect:
将不会被调用。
【讨论】:
威尔,好吧,这很奇怪。我删除了对 [myView setNeedsDisplay] 的调用,因为它以前没有做任何事情。我只是把它放回去,drawRect 就开火了。叹。感谢您的帮助。以上是关于界面视图。如何重新显示“数据驱动”的 UIView?的主要内容,如果未能解决你的问题,请参考以下文章