2010-12-14 14 views
12

Sto creando un'app per iPad e voglio aggiornare l'utente con le dimensioni attuali di una vista. Lo facevo calcolando la scala di un CGAffineTransform e moltiplicando xScale per la larghezza (della vista correlata) e la scala per l'altezza. Mi piacerebbe continuare a farlo, ma non sto più facendo le trasformazioni in 2d, e sono sicuro di quale equazione usare per estrarre le informazioni di scala da CATransform3D.Ottenere la 'scala' da un CATransform3D

Potete essere d'aiuto?

risposta

19

Per ottenere la scala corrente del livello che avete appena eseguito un valueForKeyPath: sullo strato:

CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue]; 

altri tasti possono essere trovati in Apples Core Animation Programming Guide

+0

questo ha funzionato grande! Dovrebbe essere la risposta approvata. – Collin

+0

molto utile :) Molto spesso! – TonyMkenu

+0

Divertente, restituisce sempre nil [[self presentationLayer] valueForKey: @ "transform.scale"] – Andy

8

Non ho familiarità con l'API ma lo CATransform3D sembra una normale matrice di trasformazione 4x4 per eseguire trasformazioni 3D.

Supponendo che non rappresenti nient'altro che una combinazione di scala, rotazione e traslazione, i fattori di scala possono essere estratti calcolando le grandezze delle righe o colonne del 3x3 in alto a sinistra a seconda che sia CATransform3D sia riga o colonna maggiore rispettivamente.

Ad esempio, se è maggiore della riga, la scala nella direzione x è la radice quadrata di (m11 * m11) + (m12 * m12) + (m13 * m13). Le scale y e z sarebbero analogamente le grandezze della seconda e della terza riga.

Dalla documentazione per CATransform3DMakeTranslation sembra che CATransform3D sia effettivamente riga maggiore.

Problemi correlati