Cocoa 的NSScrollView解释得非常糟糕。我希望这里有人知道这一切是怎么回事,并且可以节省我几秒钟的时间。
所以我有一个自定义的 NSView。我实现 -drawRect: 让它绘制一些东西,用颜色填充自己,等等。然后我有一个 NSScrollView 包装它(通过界面 Builder 设置)。
现在,内部自定义视图的大小必须大于适合外部滚动视图的大小——它才能滚动。我意识到这一点。我顺便配置了它,以便滚动视图调整到周围窗口的大小,但这无关紧要。
我重写了我的内部视图的 -frame 方法以返回一个大小至少为 1000x1000 的框架。
- (NSRect)frame {
CGFloat w = 1000;
CGFloat h = 1000;
if (self.superview.bounds.size.width > w)
w = self.superview.bounds.size.width;
if (self.superview.bounds.size.height > h)
h = self.superview.bounds.size.height;
return NSMakeRect(0, 0, w, h);
}
这是结果,我很难解释:
- 当滚动视图包围小于 1000x1000 的区域时,我可以滚动
但
唯一用颜色填充的区域(即我的 -drawRect: 方法对它有任何影响)是
- 与滚动视图的边界一样大
- 位于(0,0。我使用翻转,所以它是左上角,滚动后它最终位于可见区域之外。
- 位于这个无关矩形之外的可见区域根本不会被绘制。
除了这一点,我什么都不知道。似乎绘制的矩形被裁剪到滚动视图在窗口中的位置、大小或其他东西——但它没有考虑滚动的“位置”。
应该指出的是,我真的不希望发生任何其他事情。我觉得我错过了一块,但找不到哪个。对不起,文字墙,但我现在无法更好地解释。我希望回答比问更容易。
问候和希望,
不是里克·阿斯特利