2010-12-14 18 views
12

Estoy creando una aplicación para iPad y quiero actualizar al usuario con el tamaño actual de una vista. Solía ​​hacer esto calculando la escala de CGAffineTransform y multiplicando xScale por el ancho (de la vista relacionada) y yScale por la altura. Me gustaría seguir haciendo esto, pero ya no estoy haciendo transformaciones en 2d, y estoy seguro de qué ecuación usar para extraer la información de escala de CATransform3D.Obtener la 'balanza' de un CATransform3D

¿Puede ayudarnos?

Respuesta

19

Para obtener la escala actual de la capa que acaba de realizar una valueForKeyPath: en la capa:

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

Otras teclas se pueden encontrar en Apples Core Animation Programming Guide

+0

Esto funcionó muy bien! Debe ser la respuesta aprobada. – Collin

+0

muy útil :) ¡Tks mucho! – TonyMkenu

+0

Divertido, siempre devuelve nil [[self presentationLayer] valueForKey: @ "transform.scale"] – Andy

8

No estoy familiarizado con la API, pero CATransform3D parece una matriz de transformación de 4x4 normal para realizar transformaciones 3D.

Suponiendo que representa nada más que una combinación de escala, rotación y traslación, los factores de escala se pueden extraer calculando las magnitudes de las filas o columnas de la parte superior izquierda 3x3 dependiendo de si CATransform3D es fila o columna principal respectivamente.

Por ejemplo, si es una fila mayor, la escala en la dirección x es la raíz cuadrada de (m11 * m11) + (m12 * m12) + (m13 * m13). Las escalas y y z serían de manera similar las magnitudes de la segunda y tercera filas.

De la documentación para CATransform3DMakeTranslation parece que CATransform3D es de hecho fila mayor.

Cuestiones relacionadas