Tengo una vista con un marco definido como (0,0,320,480).
Yo llame a la transformación en este punto de vista:

self.myView.transform = CGAffineTransformMakeScale(factor, factor); 

La vista de escala de la preservación de una posición central en la pantalla y su marco después de mi cambio será para el ejemplo (34,-8,251,376), como se puede ver en X y en y ahora son diferentes de 0.

Si puedo usar la misma función en un CGRect con marco (0,0,320,480):

CGAffineTransform t = CGAffineTransformMakeScale(factor,factor);
CGRect rect2 = CGRectApplyAffineTransform(rect,t);

rect2 preservará 0 para X y y y voy a obtener como resultado algo como (0,0,251,376)

Por qué X e y para rect2 no cambia como en UIView ejemplo ?

OriginalEl autor MatterGoal | 2011-03-16

2 Comentarios

  1. 7

    Es cierto que usted no está técnicamente deben verse en el marco de la propiedad de un UIView después de la transformación, pero también técnicamente no es pertinente a la pregunta que te estás preguntando.

    Cuando la aplicación de CAffineTransforms a un UIView, la transformación toma en consideración el UIView respaldo de CALayer del anchorPoint de la propiedad. Desde el CALayer docs en anchorPoint:

    Por defecto (0.5, 0.5), el centro de
    los límites del rectángulo.

    Esto significa que al aplicar la escala de transformación, se utiliza el centro de la vista como el punto de anclaje, por lo que las escalas de vista en torno a esa ubicación. Supongo que si vas a establecer el punto de ancla (0, 0), se comportaría como CGRect hace.

    CGRect, por otro lado, es una simple estructura C, y no tiene una copia de la capa o un punto de anclaje. Así, la diferencia en el comportamiento.

    OriginalEl autor Matt Wilding

  2. 1

    La UIView página de referencia dice específicamente:

    Advertencia: Si la transformación de la propiedad es
    no la identidad de transformación, el valor
    de esta propiedad es indefinido y
    por lo tanto debe ser ignorado.

    Así que no mires una vista del cuadro después de la configuración de transformación.

    Gracias, creo que la diferencia está aquí: Acerca del parámetro de transformación en UIVIew: «Especifica la transformación aplicada para el receptor, con relación al centro de sus límites.»
    Usted está probablemente en lo cierto, pero es bastante claro que myView.frame es aún indefinido después de establecer myView.transform.

    OriginalEl autor Caleb

Dejar respuesta

Please enter your comment!
Please enter your name here