iphone uikit frame cgaffinetransform

Comportamiento extraño del marco UIView después de la rotación en iPhone



uikit frame (1)

Cree un objeto cuadrado UIView testView_, y agregue esto en viewDidLoad:

- (void)viewDidLoad { [super viewDidLoad]; CGRect initialRect = testView_.frame; NSLog(@"before rotation: w %f h %f x %f y %f", initialRect.size.width, initialRect.size.height, initialRect.origin.x, initialRect.origin.y); testView_.transform = CGAffineTransformMakeRotation(0.1); NSLog(@"after rotation: w %f, h %f, x %f, y %f", testView_.frame.size.width, testView_.frame.size.height, testView_.frame.origin.x, testView_.frame.origin.y); testView_.frame = initialRect; NSLog(@"reassign: w %f, h %f, x %f, y %f", testView_.frame.size.width, testView_.frame.size.height, testView_.frame.origin.x, testView_.frame.origin.y); }

Recibo esto en la consola:

2011-04-27 12:30:32.492 Test[31890:207] before rotation: w 100.000000 h 100.000000 x 20.000000 y 20.000000 2011-04-27 12:30:32.494 Test[31890:207] after rotation: w 109.483757, h 109.483757, x 15.258121, y 15.258121 2011-04-27 12:30:32.495 Test[31890:207] reassign: w 117.873589, h 100.000000, x 11.063205, y 20.000000

No pude entender la lógica detrás de este cambio en el valor del cuadro, especialmente el último. ¿Alguien me puede iluminar? Gracias.


En UIView Class Reference puede ver here que no debe establecer el marco de una vista con una propiedad de transformación diferente a CGAffineTransformIdentity .

Si desea cambiar la posición de la vista transformada, debe usar la propiedad central . Si desea ajustar el tamaño, debe utilizar la propiedad de los límites .