【发布时间】:2014-08-01 00:02:56
【问题描述】:
我正在尝试在 NSScrollView 内绘制平铺图案,该 NSScrollView 本身位于可调整大小的窗口内(在 Mac OS X 上)。代码只调用 [NSColor colorWithPatternImage]、CGContextSetFillColorWithColor 和 CGContextFillRect。
问题是图案是相对于窗口的左下角绘制的。这是记录在案的行为,但会导致两种不愉快的影响:
- 调整窗口大小时,模式会以令人惊讶的方式向上或向下滚动。
- 当滚动视图滚动,然后向后滚动时,新绘制的图案不会与图案的滚动(缓冲)部分对齐。
我可以通过调用 CGContextConvertPointToDeviceSpace、传入 0,0 并查看我返回的内容来解决问题 2——这告诉我我的滚动偏移量,然后我可以将其与 CGContextSetPatternPhase 一起使用来解决问题。 (虽然它并没有完全解决它——当我快速滚动时,我仍然看到不匹配的模式,原因我还没有理清。)
但事实证明,解决问题 1 确实很棘手。从我只知道 CGContext 的绘图代码中,我找不到任何方法来获取窗口高度。 (设备/用户空间转换例程似乎完全不受窗口高度的影响。)
没有在所有绘图代码中添加一堆管道以传递窗口引用,有没有办法找出正确的偏移量,以便在调整窗口大小时我的图案将保持不变,并在scrollview 滚动了吗?
【问题讨论】:
标签: cocoa drawing coordinate-systems