私は CTM で一連の変換と回転を行っていますが、ある時点で、さらに変換を行う前に ID にリセットする必要があります。
私はそれを行う適切な方法を見つけることができません (明らかに、CGContextSetCTM などの名前の関数があったはずです)。効率が重要であるため、CGContextSaveGState/CGContextRestoreGState を使用したくありません...
私は CTM で一連の変換と回転を行っていますが、ある時点で、さらに変換を行う前に ID にリセットする必要があります。
私はそれを行う適切な方法を見つけることができません (明らかに、CGContextSetCTM などの名前の関数があったはずです)。効率が重要であるため、CGContextSaveGState/CGContextRestoreGState を使用したくありません...
CGContextGetCTMを介して現在の変換マトリックスを取得し、 CGAffineTransformInvertで反転し、現在のマトリックスにCGContextConcatCTMを使用して反転されたマトリックスを乗算します (これは重要です!) 。CTM はアイデンティティになりました。
現在の CTM が特異な場合、CGAffineTransformInvert を使用して現在の CTM を反転しても機能しないことに注意してください。
明らかなケースは、以前に CGContextConcatCTM が行列 CGAffineTransformMake(0, 0, 0, 0, 0, 0) で実行された場合です。
保存/復元操作は、おそらく単位行列のサイズ (サイズの 2 倍または 3 倍) に匹敵するメモリ領域の単一のメモリ コピーです。保存操作でのみ発生する可能性があります。これは、おそらく nop FUNCTION 呼び出しよりも遅くないと考えてください。各グラフィック操作は、いくつかの乗算操作の規模であり、保存/復元サイクルごとにコードでこれが複数回発生すると推測しています。1 回のグラフィック操作の時間は、おそらく 1 回の保存/復元サイクルよりも長くなります。