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
aAspect Fit
en el constructor de interfaz.