我有一个NSView
子类foo
,它会覆盖drawRect
:
- (void)drawRect:(NSRect)dirtyRect
{
[self doStuff];
}
我原以为每当我添加我的类的实例bar
作为另一个视图的子视图时,bar
将被重绘。但是,当我在我的应用程序中添加bar
作为主窗口的contentView
时,我并没有看到这种情况。
我尝试添加另一个覆盖:
- (void)viewDidMoveToSuperview
{
self.needsDisplay = YES;
}
...希望当bar
获得超级视图时,它会使其显示无效并强制重绘。没有这样的运气(viewDidMoveToSuperview
被调用,但不是drawRect:
)。
我想我可能会误解drawRect:
如何被调用,我承认我对绘图事件循环一般没有最好的理解。我无法在网上找到很多关于此的文档。
所以我的问题是双重的:1)在调用drawRect:
方面我做错了什么? 2)是否有关于在可可中绘制UI的事件循环的相关在线文档?
修改:
在我的UI链中,调用它的foo
实例drawRect:
有两个子视图:一个基本上是NSTextView
的子类,其大小为它的内容,另一个是NSScrollView
。由于运气的缘故,我碰巧注释掉了添加NSScrollView
的代码,突然foo
的实例再次调用drawRect
。
所以我NSScrollview
以某种方式阻止我的foo
接收drawRect:
。通过Google快速搜索,我发现其他人报告了与绘图和NSScrollView
相关的问题。但是,这些帖子中的大多数似乎都与 NSScrollView
中的子视图相关,而不是NSScrollView
的超级视图。
所以这是我最新的问题:我的NSScrollView
实例阻止其父级接收drawRect:
怎么办?
答案 0 :(得分:-2)
您是否尝试调用[查看显示];而不是needsDiplay?