所以我有这个简单的自定义NSView-inside-NSScrollView设置,以编程方式在awakeFromNib中构建,就像在Apple的ScrollView编程指南中一样。
自定义视图(NSScrollView的documentView)最初具有特定的帧大小,滚动位置保留在自定义视图的原点。没有用户启动,也没有编程滚动。
现在,从另一个线程,通过发出performSelectorOnMainThread,我通过在自定义视图上调用setFrameSize(newSize)来更改自定义视图的框架大小,只是使其更高。原点和宽度保持不变。
现在的问题是,为什么我得到了drawRect:大概是由cocoa调用的自定义视图,脏的矩形为(0,0,viewwidth,viewheight)? 我认为这很奇怪,至少它不是最优的,因为在没有任何变化的区域中存在重绘请求。例如,高度从10000扩展到10300,这与在可见矩形中显示的矩形无关(0,0,视图宽度,视图高度)。
从NSView的类引用中,我假设setFrameSize:不会导致drawRect:被触发,只要你不发出setNeedsDrawInRect:或类似的。
那么,有没有人知道为什么,在包含在NSScrollView中的情况下,这个drawRect:对包含的视图的调用是由Cocoa做出的? 哪个对象(NSScrollView,NSClipView,NSNotificationCenter ......)正在发出此调用?
任何提示都非常感谢, 约尔格