gpt4 book ai didi

objective-c - 为什么不是 drawRect : getting called?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:13 24 4
gpt4 key购买 nike

我有一个 NSView 子类 foo 覆盖了 drawRect:

- (void)drawRect:(NSRect)dirtyRect
{
[self doStuff];
}

我本以为每当我将类的实例 bar 添加为另一个 View 的 subview 时,bar 都会被重绘。但是,当我将 bar 添加为应用程序主窗口的 contentView 时,我发现情况并非如此。

我尝试添加另一个覆盖:

- (void)viewDidMoveToSuperview
{
self.needsDisplay = YES;
}

...希望当 bar 获得 super View 时,它会使其显示无效并强制重绘。没有这样的运气(viewDidMoveToSuperview 被调用,但不是 drawRect:)。

我想我可能误解了 drawRect: 是如何被调用的,而且我承认我对一般的绘图事件循环没有最好的理解。我在网上找不到很多关于此的文档。

所以我的问题有两个方面:1) 在调用 drawRect: 方面我做错了什么? 2) 有没有关于cocoa中绘制UI的事件循环的相关在线文档?

编辑:

在我的 UI 链中,没有调用 drawRect:foo 实例有两个 subview :一个本质上是 的子类NSTextView,它根据内容调整大小,另一个是 NSScrollView。幸运的是,我碰巧注释掉了添加 NSScrollView 的代码,然后 foo 的实例突然调用了 drawRect再次。

所以我的 NSScrollview 以某种方式阻止我的 foo 接收 drawRect: 。通过快速 Google 搜索,我发现其他人已经报告了与绘图和 NSScrollView 相关的问题。但是,这些帖子中的大多数似乎都与 NSScrollView 中的 subview 相关,而不是 NSScrollView 的父 View 。

所以这是我的最新问题:我的 NSScrollView 实例如何阻止其父级接收 drawRect:

最佳答案

您是否尝试调用 [view display];而不是 needsDiplay ?

关于objective-c - 为什么不是 drawRect : getting called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com