2010-05-02 14 views
6

Esto es bastante el iPhone quandry. Estoy trabajando en una biblioteca, pero he reducido mi problema a un código muy simple. Lo que hace este código es crear una vista de 50x50, aplica una transformación de rotación de algunos grados y luego baja el marco varias veces. El resultado es que la vista 50x50 ahora es mucho más grande.¿Girar usando una transformación, luego cambiar el origen del marco y ver expandir?

Aquí está el código:

// a simple 50x50 view 
UIView *redThing = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)]; 
redThing.backgroundColor = [UIColor redColor]; 

[self.view addSubview:redThing]; 

// rotate a small amount (as long as it's not 90 or 180, etc.) 
redThing.transform = CGAffineTransformRotate(redThing.transform, 0.1234); 

// move the view down 2 pixels 
CGRect newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

// move the view down another 2 pixels 
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

// move the view down another 2 pixels 
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

// move the view down another 2 pixels 
newFrame = CGRectMake(redThing.frame.origin.x, redThing.frame.origin.y + 2, redThing.frame.size.width, redThing.frame.size.height); 
redThing.frame = newFrame; 

Entonces, ¿qué diablos está pasando? Ahora, si muevo la vista aplicando una transformación de traducción, funciona bien. Pero eso no es lo que quiero hacer y este debería funcionar de todos modos.

¿Alguna idea?

+0

¿Quizás la transformación se está aplicando después de los turnos? – Artelius

Respuesta

14

De la documentación UIView:

Si la transformación de la propiedad también se establece, utilice los límites y las propiedades central en el lugar; de lo contrario, la animación de cambios en la propiedad del marco no refleja correctamente la ubicación real de la vista.

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, debe ignorarse.

En otras palabras, me habría cuidado de la propiedad frame cuando un transform se establece.

+1

Wow. Gracias ... no vi eso en los documentos. Sorprendente. – ZaBlanc

+0

@ZaBlanc, si esta es la respuesta correcta, debe marcarla como tal. –

+0

Hecho. Acabo de enterarme hace 5 minutos sobre la marca de verificación. Compensándolo en todos mis posts antiguos ahora. ;-) – ZaBlanc

Cuestiones relacionadas