iphone type Cómo girar el imageView en un UIButton, y NO escalarlo




uikit ios (3)

Estoy intentando rotar la propiedad imageView de un UIBUtton sin escalarla. La imagen en cuestión es 24x18, más ancha que alta, pero una vez girada en su lugar, la imagen se escala para mantener esas dimensiones, lo que me deja una imagen muy aplastada. ¿Cómo puedo prevenir esto?

A continuación se muestra mi código ..

-(IBAction)rotateButton
{
NSLog( @"Rotating button" );

[UIView beginAnimations:@"rotate" context:nil];
[UIView setAnimationDuration:.5f];
if( CGAffineTransformEqualToTransform( button.imageView.transform, CGAffineTransformIdentity ) )
{
    button.imageView.transform = CGAffineTransformMakeRotation(M_PI/2);
} else {
    button.imageView.transform = CGAffineTransformIdentity;
}
[UIView commitAnimations];
}

Esto no sucede si aplico la transformación al botón en lugar de button.imageView, así que supongo que es una propiedad de imageView que no estoy configurando correctamente.

Tus pistas y abucheos son bienvenidos.

METRO.


He encontrado que subclase UIButton para eliminar la transformación durante layoutSubviews funcionó, como esto:

class RotatableImageButton: UIButton {
    override func layoutSubviews() {
        let originalTransform = imageView?.transform
        imageView?.transform = CGAffineTransformIdentity
        super.layoutSubviews()
        if let originalTransform = originalTransform {
            imageView?.transform = originalTransform
        }
    }
}

He visto que la propiedad UIImageView de UIButtons se comporta de forma muy extraña; parece que algunas de sus propiedades son de solo lectura, incluida la configuración UIViewContentMode, que es de lo que estamos hablando aquí.

La mejor solución que he encontrado es imitar la configuración del "botón que contiene una imagen" con un UIImageView separado, y un UIButton de estilo personalizado vacío encima de él. Te da mucha más flexibilidad para gestionar la imagen.


Aplicar el siguiente código en la inicialización de la vista en algún lugar en la vista se cargó. Esto ayudará. La respuesta que obtuviste arriba no es una respuesta verdadera :)

button.imageView.clipsToBounds = NO;
button.imageView.contentMode = UIViewContentModeCenter;




core-graphics