2

所以我有这个简单的自定义 NSView-inside-NSScrollView 设置,以编程方式在 awakeFromNib 中构建,就像在 Apple 的 ScrollView 编程指南中一样。

自定义视图(NSScrollView 的 documentView)最初具有一定的帧大小,并且滚动位置保持在自定义视图的原点。没有用户启动,也没有程序化滚动。

现在,从不同的线程,通过发出 performSelectorOnMainThread,我通过在自定义视图上调用 setFrameSize(newSize) 来更改自定义视图的帧大小,只会使其高度变大。原点和宽度保持不变。

现在的问题是,为什么我在自定义视图上得到 drawRect: 调用,大概是由 cocoa 调用的,其脏矩形为 (0, 0, viewwidth, viewheight) ?我认为这很奇怪,至少它不是最优的,因为在一个没有任何变化的区域有一个重绘请求。例如,高度从 10000 扩展到 10300,这与此时在可见矩形中显示的矩形无关(0、0、viewwidth、viewheight)。

从 NSView 的类参考中,我假设 setFrameSize: 不会导致 drawRect: 被触发,只要你不发出 setNeedsDrawInRect: 或类似的。

那么,有谁知道为什么在被包含在 NSScrollView 中的情况下,这个 drawRect: 对包含的视图的调用是由 Cocoa 进行的?哪个对象(NSScrollView、NSClipView、NSNotificationCenter...)正在发出这个调用?

非常感谢任何提示,Joerg

4

0 回答 0