使用翻转坐标打印

时间:2013-09-08 10:11:40

标签: ios macos cocoa

我为OS X编写了一个非常复杂的打印引擎,我需要移植到iOS。通常,它是NSView子类在纸上打印各种字符串和图像 - 想象一张发票。

现在我需要将它移植到iOS - 当然,我的第一步是使用各种宏来桥接CG / NS内容(e.g. NSRect<->CGRect)并且我已经到了一个点,视图实际打印然而,在纸上(使用 - viewPrintFormatter),坐标被翻转,因为Cocoa Touch使用翻转的坐标,所以整个布局都是错误的。

有很多答案通过将变换应用到当前上下文来翻转坐标,但是,这也会水平翻转任何打印的文本 - 因此,虽然布局正确,但文本难以辨认,这是一个大问题。

将整个引擎移动到翻转的坐标是一种选择,但这会占用大量时间,并且会带来许多其他问题。

有没有人遇到这个问题并以某种方式解决了它?

1 个答案:

答案 0 :(得分:1)

通常可以通过更改当前变换而不使其也水平翻转来完成此操作。您只需将Y坐标缩放-1,然后将它们偏移视图的高度即可。所以你的仿射变换矩阵看起来像这样:

| 1.0  0.0 | 
| 0.0 -1.0 | 
| 0.0  h   |

其中h是视图的高度。所以在代码中,它会是这样的:

CGContextScaleCTM (context, 1.0, -1.0);
CGContextTranslateCTM (context, 0.0, h);

(我可能会对这些顺序进行颠倒 - 我永远无法记住他们进入的顺序!)