Ok, prometí que investigaría, así que aquí está mi respuesta:
Creo un escenario e que debe ser algo equivalente a la suya, el código de la siguiente manera:
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width/2-100,
self.view.bounds.size.height/2-125,
200,
250)];
imageView.image = [UIImage imageNamed:@"testimage.jpg"];
imageView.contentMode = UIViewContentModeScaleAspectFill;
/*
* I added clipsToBounds, because my test image didn't have a size of 200x250px
*/
imageView.clipsToBounds = YES;
[self.view addSubview:imageView];
NSLog(@"frame: %@",[NSValue valueWithCGRect:imageView.frame]);
NSLog(@"bounds: %@",[NSValue valueWithCGRect:imageView.bounds]);
imageView.layer.anchorPoint = CGPointMake(0.5, 0.5);
imageView.transform = CGAffineTransformMakeRotation(30*M_PI/180);
NSLog(@"frame after rotation: %@",[NSValue valueWithCGRect:imageView.frame]);
NSLog(@"bounds after rotation: %@",[NSValue valueWithCGRect:imageView.bounds]);
Este código se supone que está utilizando ARC. Si no agrega
[imageView release];
al final.
Utilizando este código los registros de un aspecto como este:
[16221:207] frame: NSRect: {{60, 105}, {200, 250}}
[16221:207] bounds: NSRect: {{0, 0}, {200, 250}}
[16221:207] frame after rotation: NSRect: {{10.897461, 71.746826}, {298.20508, 316.50635}}
[16221:207] bounds after rotation: NSRect: {{0, 0}, {200, 250}}
Como se puede ver los límites siempre permanecen igual. Lo que realmente cambia debido a la rotación es el marco, porque una imagen que ha sido rotada en 30 ° C es, por supuesto, más ancha que si no hubiera sido rotada. Y como el punto central se ha establecido en el centro real de la vista, el origen del marco también cambia (se empuja hacia la izquierda y hacia arriba). Tenga en cuenta que el tamaño de la imagen en sí no cambia. No usé la transformación de escala, ya que el resultado se puede lograr sin escalar.
pero para que sea más claro aquí hay algunas fotos para ti (0 °, 30 ° 90 ° de rotación):
Ya ven bastante similares, ¿verdad? Dibujé los cuadros reales para dejar en claro cuál es la diferencia entre los límites y el marco. El siguiente realmente lo deja en claro. Sobrepuse todas las imágenes, girándolas por los grados negativos con los que se giró el UIImageView, obteniendo el siguiente resultado:
Así que como ve, es bastante sencillo cómo rotar las imágenes. Ahora a su problema que realmente quiere que el marco permanezca igual. Si desea que el fotograma final tenga el tamaño de su fotograma original (en este ejemplo con un ancho de 200 y una altura de 250), tendrá que escalar el fotograma resultante. Pero esto, por supuesto, dará como resultado la ampliación de la imagen, que no desea.De hecho, creo que un marco más grande no será un problema para ti, solo necesitas saber que debes tenerlo en cuenta debido a la rotación.
En resumen: no es posible tener un UIImageView que tendrá el mismo marco después de la rotación. Esto no es posible para ningún UIView. Solo piensa en un rectángulo. Si lo gira, no será un rectángulo después de la rotación, ¿verdad?
Por supuesto, puede colocar su UIImageView dentro de otra UIView que tendrá un marco no girado con un ancho de 200 y una altura de 250, pero eso sería superficial, ya que no cambiará el hecho de que una el rectángulo girado tiene un ancho y altura diferente que el original.
Espero que esto ayude. :)
¿Qué está cambiando realmente? ¿Estás hablando de que el marco de UIImageView cambia? ¿O es un cambio visible del tamaño de la imagen? ¿Cómo confirmaste el cambio? Si gira una vista, su marco siempre cambiará, ya que el marco representa el espacio de la vista dentro de su supervista. Los límites de la vista girada serán los mismos. –
¿Hay algún código en touchesBegan: – MCKapur
@JohannesLumpe Cambiando la imagen de Weidht, y probablemente la altura también. Sí, es un cambio visible, porque la imagen se está haciendo mucho más pequeña, luego estaba antes de girar, con el mismo tamaño dado de ImageView. – User1234