Come ripristinare l'identità della matrice di trasformazione corrente & # 8220; & # 8221; con qualche funzione CGContext?

StackOverflow https://stackoverflow.com/questions/469505

Domanda

Sto facendo una serie di traduzioni e rotazioni sul marchio comunitario e ad un certo punto ho bisogno di ripristinarlo sull'identità prima di andare oltre con le trasformazioni.

Non riesco a trovare un modo corretto per farlo (ovviamente, dovrebbe esserci stata una funzione chiamata CGContextSetCTM o giù di lì) e poiché l'efficienza è la chiave, non voglio usare CGContextSaveGState / CGContextRestoreGState ...

È stato utile?

Soluzione

Ottieni la matrice di trasformazione corrente tramite CGContextGetCTM , inverti con CGAffineTransformInvert e moltiplica la matrice corrente per quella invertita (è importante!) con CGContextConcatCTM . Il marchio comunitario è ora identità.

Altri suggerimenti

Tieni presente che l'inversione del marchio comunitario attuale con CGAffineTransformInvert non funziona se il marchio comunitario attuale è singolare.

Il caso ovvio è se in precedenza CGContextConcatCTM era stato eseguito con matrice CGAffineTransformMake (0, 0, 0, 0, 0, 0).

Le operazioni di salvataggio / ripristino sono probabilmente una singola copia della memoria di una regione di memoria paragonabile alla dimensione della matrice identità (due volte o tre volte la dimensione). Potrebbe succedere solo per l'operazione di salvataggio. Considera che questo probabilmente non è molto più lento di una semplice chiamata FUNCTION. Ogni operazione grafica è nella scala di diverse operazioni di moltiplicazione e suppongo che ciò avvenga più volte nel codice per ciascun ciclo di salvataggio / ripristino. Il tempo di un'operazione grafica è probabilmente maggiore di un singolo ciclo di salvataggio / ripristino.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top