我试图在NSScrollView中绘制一个平铺图案,它本身位于可调整大小的窗口内(在Mac OS X上)。代码只调用[NSColor colorWithPatternImage],CGContextSetFillColorWithColor和CGContextFillRect。
问题是图案是相对于窗口的左下角绘制的。这是记录在案的行为,但会导致两种不愉快的影响:
我能够通过调用CGContextConvertPointToDeviceSpace来解决问题2,传入0,0,看看我得到了什么 - 这告诉我我的滚动偏移,然后我可以使用CGContextSetPatternPhase来解决问题。 (虽然它没有完全解决它 - 当我快速滚动时,我仍然看到不匹配的模式,原因还没有解决。)
但解决问题1确实非常棘手。从我的绘图代码,它只知道CGContext,我找不到任何方法来获得窗口高度。 (设备/用户空间转换例程似乎完全不受窗口高度的影响。)
没有为所有绘图代码添加一堆管道以传递窗口引用,是否有任何方法可以找出正确的偏移量,以便在调整窗口大小时我的模式将保持不变,并在滚动浏览滚动?
答案 0 :(得分:0)
糟糕 - 发布此消息后不久,我发现至少部分答案:当前转换矩阵(来自CGContextGetCTM)反映了窗口高度和滚动偏移。
(至少,它确实在我的应用程序中;我在管道中很早就设置了CTM以给我一个自上而下的坐标系统,所以我可以在iOS上使用相同的代码。)
因此,如果我只调用CGContextGetCTM,然后将结果的.x0和.y0值传递给CGContextSetPatternPhase,那么它几乎可以工作。
当我水平快速滚动时,我仍然遇到一些视觉故障,虽然不是垂直滚动 - 这是一种非常奇怪的效果,这表明它可能是我的代码中的某些内容,或者可能与内容区域是。我会进一步挖掘。