代码之家  ›  专栏  ›  技术社区  ›  Ariel Malka

如何用CGContext函数重设“当前变换矩阵”的标识?

  •  7
  • Ariel Malka  · 技术社区  · 16 年前

    我在CTM上做了一系列的翻译和旋转,在进行进一步的转换之前,我需要将它重置为标识。

    我找不到任何合适的方法来做这件事(很明显,应该有一个名为cgContextSetCtm的函数),因为效率是关键,所以我不想使用cgContextSavegState/cgContextRestoregState…

    3 回复  |  直到 14 年前
        1
  •  15
  •   EightyEight    16 年前

    通过获取电流变换矩阵 CGContextGetCTM ,将其反转为 CGAffineTransformInvert 将当前矩阵乘以倒矩阵(这很重要!)具有 CGContextConcatCTM . CTM现在是身份。

        2
  •  3
  •   jhavatar    14 年前

    请注意,如果当前CTM是奇异的,则使用CGaffinetTransformInvert反转当前CTM不起作用。

    明显的情况是,如果以前使用Matrix CGAffinetTransformMake(0,0,0,0,0,0,0)执行CGContextConcatTm。

        3
  •  2
  •   Qwmiwn    14 年前

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