1

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

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

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

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

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

4

1 回答 1

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);

(我可能把它们的顺序颠倒了——我永远记不起它们的顺序!)

于 2013-09-08T15:14:20.360 回答