2011-08-24 24 views
7

Tengo un UIImageView que está dentro de otra UIView.UIImageView "aplastado" después de CGAffineTransformMakeRotation

que gire el UIImageView con algo como:

object.transform=CGAffineTransformMakeRotation(angle) 

Cuando el UIView exterior no se gira, y se puede utilizar para girar la CGAffineTransformMakeRotation UIImageView, y funciona correctamente.

Sin embargo, cuando se gira la UIView externa, y luego gire el UIImageView ("ángulo" distinto de cero), el UIImageView aparece "aplastado" o "aplanado".

Esto parece empeorar constantemente a medida que se gira en diferentes ángulos.

¿Por qué sucede esto? ¿La UIView externa está modificando la matriz de transformación que estoy modificando de nuevo explicándola?

¿Cómo puedo rotar un UIImageView dentro de una UIView girada y hacer que gire correctamente?

Respuesta

15

Tal vez su UIIamgeView es convertido por su super visión.

Usted puede intentar desactivar la capacidad de cambiar el tamaño automáticamente mediante el establecimiento de:

imageView.autoresizingMask = UIViewAutoresizingNone;

o si simplemente no quieren IOS para cambiar automáticamente el tamaño de su imageView pero todavía quiere que ajusta automáticamente la posición para usted , puede llamar a:

imageView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;

Dime si todavía tiene un problema.

+0

Ah ... pensamiento inteligente! Podría ser "aplastamiento" no cuando se gira necesariamente, sino después de un cambio de orientación, que de hecho cambia el tamaño de la UIView [externa]. ¡Lo intentaré esta noche! ¡Gracias! – Brad

+0

+1 respuesta dio las pistas que necesitaba recordar para desactivar el diseño automático en la vista de nivel superior. – Olie

3

Antialiasing es el proceso mediante el cual los bordes de una vista se mezclan con los colores de la capa debajo de ella. El antialiasing para bordes de vista se puede habilitar en todo el sistema estableciendo el indicador UIViewEdgeAntialiasing en info.plist de su aplicación, pero como advierte la documentación, esto puede tener un impacto negativo en el rendimiento (porque requiere Core Animation para muestrear píxeles del buffer de procesamiento debajo de su capa para calcular la mezcla).

Renders con antialisasing borde = SÍ