Me sorprendió no encontrar una respuesta a esta pregunta, tal vez es algo muy sencillo de alguna manera por alto:Obtener tamaño de UIView después solicitando CGAffineTransform
Cómo obtener el tamaño real de un UIView después de aplicar un CGAffineTransform a ¿eso?
por ejemplo.
Mi UIView tiene un tamaño de 300 x 200, aplico una transformación de escala digamos factor 2 horizontal y vertical, por lo que UIView ahora toma 600 x 400 en la pantalla, pero sus límites y sus límites siguen siendo de un tamaño de 300 x 200 ... ¿dónde encuentro el tamaño real de UIView?
ps. Olvidé mencionar que también quiero rotar la vista. Si aplico solo escalar CGSizeApplyAffineTransform funciona muy bien, pero cuando también hay rotación, no funciona correctamente.
Editar: drawnonward me señaló en la dirección correcta, sólo refinado un poco el código para compilar y aquí está:
UIView* view = (your view being transformed);
CGAffineTransform trans = (view.transform or create a new transformation);
CGRect rect = [view bounds];
CGMutablePathRef path = CGPathCreateMutable();
rect.origin = CGPointZero;
CGPathAddRect(path , &trans , rect);
rect = CGPathGetBoundingBox(path);
CGPathRelease(path);
Ahora contiene rect.size las dimensiones de la vista de la transformación aplicados Gracias nuevamente a drawonward
Aquí está la documentación sobre "marco" de los documentos de Apple: Advertencia: Si la propiedad de transformación no es la transformación de identidad, el valor de esta propiedad no está definido y, por lo tanto, ser ignorado. Entonces, frame está fuera de cuestión cuando se aplica la transformación. Y "límites" siempre devuelve el tamaño original –
¡De hecho! Argh, esta biblioteca de funciones de la que siempre me olvido, CGPathGetBoundingBox fue el truco. Edité la pregunta con el código de trabajo, muchas gracias, hombre –
También tenga en cuenta que se supone que la propiedad del centro funciona, incluso con transformaciones que no sean de identidad. – Olie