如何重置以使用一些CGContext函数来标识“当前转换矩阵”?

时间:2009-01-22 15:12:42

标签: cocoa-touch matrix core-graphics

我正在CTM上进行一系列翻译和轮换,在某些时候我需要将其重置为身份以进行进一步的转换。

我找不到任何正确的方法(显然,应该有一个名为CGContextSetCTM的函数),因为效率是关键,我不想使用CGContextSaveGState / CGContextRestoreGState ...

3 个答案:

答案 0 :(得分:15)

通过CGContextGetCTM获取当前变换矩阵,将其反转为CGAffineTransformInvert,并将当前矩阵乘以倒置的(重要的!)与CGContextConcatCTM相乘。 CTM现在是身份。

答案 1 :(得分:3)

请注意,如果您当前的CTM是单数,则使用CGAffineTransformInvert反转当前CTM不起作用。

显而易见的情况是,之前的CGContextConcatCTM是使用矩阵CGAffineTransformMake(0,0,0,0,0,0)执行的。

答案 2 :(得分:2)

保存/恢复操作可能是内存区域的单个内存副本,与身份矩阵的大小相当(两倍或三倍大小)。它可能只发生在保存操作中。考虑到这可能不比nop FUNCTION调用慢得多。每个图形操作都在几个乘法运算的范围内,我猜测在每个保存/恢复周期的代码中这种情况不止一次发生。一次图形操作的时间可能大于单个保存/恢复周期。