objective ios cocoa-touch uiimageview uiimage stretching

ios - objective - ¿Cómo detener el estiramiento de una imagen dentro de UIImageView?



uiimageview set image swift (10)

Tengo un UIImageView donde establecí el tamaño del marco en x = 0, y = 0, width = 404, height = 712 . En mi proyecto, necesito cambiar la imagen en UIImageView dinámicamente.

Estoy usando este código para cambiar la imagen:

self.imageView.image = [UIImage imageNamed:@"setting-image.png"];

El problema es que cuando el tamaño de la imagen *.png es más pequeño que el tamaño del marco UIImageView , la imagen se estira. No quiero que se estire. ¿Hay alguna forma de hacer eso?


Actualización para Swift 3:

imageView.contentMode = .scaleAspectFit


Cambia el modo UIImage de ''scale to fill'' a ''Center'' dentro del constructor de interfaz. Asegúrese de que su imagen sea del tamaño exacto que necesita.


Cambiar el modo de contenido, por ejemplo:

imageView.contentMode = UIViewContentModeScaleAspectFit;


Configurar clipsToBounds en combinación con UIViewContentModeScaleAspectFit contentMode fue lo que hizo el truco para mí. Espero que ayude a alguien!

imageView.clipsToBounds = YES; imageView.contentMode = UIViewContentModeScaleAspectFit;


Debe establecer CGSize como el ancho y alto de su imagen para que la imagen no se estire y se organizará en el medio de la vista de la imagen.

- (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size { CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height); CGFloat width = image.size.width * scale; CGFloat height = image.size.height * scale; CGRect imageRect = CGRectMake((size.width - width)/2.0f, (size.height - height)/2.0f, width, height); UIGraphicsBeginImageContextWithOptions(size, NO, 0); [image drawInRect:imageRect]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }


Puedes usar

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

Swift 3:

imageView.contentMode = .scaleAspectFit

O UIViewContentModeCenter / .center , o cualquiera de los otros modos descritos en la documentación de UIView .


Use esto para su UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill;

No obtendrás ningún espacio y conservarás la escala. Sin embargo, se recortará una parte de la imagen.

Si usa lo siguiente:

imageView.contentMode = UIViewContentModeScaleAspectFit;

Habrá un espacio vacío, pero la escala se conserva.


Use la propiedad contentMode . Probablemente desee UIViewContentModeScaleAspectFit o UIViewContentModeCenter .


aún estirar cuando la imagen es más grande que la imagen

rápido

let qCodeImage = UIImage(named: "qcode-placeholder.png")! let qCodeImageView = UIImageView(frame: CGRectMake(0, 0, CGRectGetWidth(cardView.frame)-30, CGRectGetWidth(cardView.frame)-30)) qCodeImageView.image = qCodeImage qCodeImageView.clipsToBounds = true qCodeImageView.contentMode = UIViewContentMode.ScaleToFill qCodeImageView.center = cardView.center


Cómo usar el tamaño original de la imagen , sin ningún tipo de estiramiento

  • Simplemente cambie el Modo de UIImage de la scale to fill a Aspect Fit en el constructor de interfaz.