2012-05-23 13 views
5

Tengo una vista en la que estoy haciendo algunos dibujos específicos en drawRect. Estos dibujos son dinámicos y se basan en el ancho y alto de la vista. Luego, la vista que lo contiene le aplica una transformación de rotación. Sin embargo, esta transformación parece ajustar los valores para el marco de mi vista, lo que afecta mi dibujo en drawRect.¿La transformación de vista de IOS modifica el marco?

NSLog (@ "antes:% f,% f,% f,% f", botón.frame.origin.x, button.frame.origin.y, button.frame.size.width, button.frame .size.height);

CGAffineTransform currentTransform = button.transform; 
    CGAffineTransform transformRotate = CGAffineTransformMakeRotation(degreesToRadians); 
    button.transform = transformRotate; 

    NSLog(@"after:%f,%f,%f,%f",button.frame.origin.x,button.frame.origin.y,button.frame.size.width,button.frame.size.height); 

Aquí está la salida:

antes: 50.000000,100.000000,150.000000,50.000000 después: 65.849365,47.548096,118.301262,154.903809

¿Este comportamiento correcto o estoy aplicando la transformación de forma incorrecta ?

Respuesta

12

Consulte la documentación de referencia en UIView's frame property;


marco

El rectángulo marco, que describe ubicación y el tamaño de la vista en el sistema de coordenadas de su supervista.

@property(nonatomic) CGRect frame 

Advertencia

Si la transformación de la propiedad no es transformar la identidad, el valor de esta propiedad no está definida y por lo tanto debe ser ignorada.


A pesar de esta advertencia, las cosas funcionan según lo previsto. Una vez que se aplica una transformación (otra identidad), el marco generalmente resulta en el rectángulo de proyección de la vista original. Pero, una vez más, no debe ignorar esa advertencia si realmente desea saber sobre el marco con la transformación aplicada y usar CGRectApplyAffineTransform para obtenerla correctamente.

Cuestiones relacionadas