我为OS X编写了一个非常复杂的打印引擎,我需要移植到iOS。通常,它是NSView
子类在纸上打印各种字符串和图像 - 想象一张发票。
现在我需要将它移植到iOS - 当然,我的第一步是使用各种宏来桥接CG / NS内容(e.g. NSRect<->CGRect)
并且我已经到了一个点,视图实际打印然而,在纸上(使用 - viewPrintFormatter
),坐标被翻转,因为Cocoa Touch使用翻转的坐标,所以整个布局都是错误的。
有很多答案通过将变换应用到当前上下文来翻转坐标,但是,这也会水平翻转任何打印的文本 - 因此,虽然布局正确,但文本难以辨认,这是一个大问题。
将整个引擎移动到翻转的坐标是一种选择,但这会占用大量时间,并且会带来许多其他问题。
有没有人遇到这个问题并以某种方式解决了它?
答案 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);
(我可能会对这些顺序进行颠倒 - 我永远无法记住他们进入的顺序!)