我有一个UIImageView
将帧尺寸设置为的位置x = 0, y = 0, width = 404, height = 712
。在我的项目中,我需要UIImageView
动态更改图像。
我正在使用此代码来更改图像:
self.imageView.image = [UIImage imageNamed:@"setting-image.png"];
问题是,当*.png
图像尺寸小于UIImageView
帧尺寸时,图像会拉伸。我不希望它伸展。有什么办法吗?
Answers:
设置clipsToBounds与UIViewContentModeScaleAspectFit contentMode结合使用对我来说是成功的窍门。希望能对某人有所帮助!
imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
使用该contentMode
属性。您可能想要UIViewContentModeScaleAspectFit
或UIViewContentModeCenter
。
在界面构建器中将UIImage的模式从“缩放至填充”更改为“居中”。确保您的图像大小正确。
您必须将CGSize设置为图像的宽度和高度,以使图像不会拉伸,并且会排列在imageview的中间。
- (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;
}
用它来做你的 UIImageView
imageView.contentMode = UIViewContentModeScaleAspectFill;
您将不会获得任何空间并保留比例。但是,图像的某些部分将被剪切掉。
如果使用以下命令:
imageView.contentMode = UIViewContentModeScaleAspectFit;
将会有一些空白,但会保留比例。
当图像大于imageivew时仍然拉伸
迅速
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