28

我有我的 UIImageView 并在其中放入了我调整大小的图像:

UIImageView *attachmentImageNew = [[UIImageView alloc] initWithFrame:CGRectMake(5.5, 6.5, 245, 134)];
attachmentImageNew.image = actualImage;
attachmentImageNew.backgroundColor = [UIColor redColor];
attachmentImageNew.contentMode = UIViewContentModeScaleAspectFit;

我尝试UIImageView通过这样做来获得调整后图片的宽度:

NSLog(@"Size of pic is %f", attachmentImageNew.image.size.width);

但它实际上返回了原始图片的宽度。关于如何获得我在屏幕上看到的图片框架的任何想法?

编辑:这是我的UIImageView样子,红色区域是它backgroundColor

在此处输入图像描述

4

6 回答 6

47

我不知道是否有更明确的解决方案,但这有效:

float widthRatio = imageView.bounds.size.width / imageView.image.size.width;
float heightRatio = imageView.bounds.size.height / imageView.image.size.height;
float scale = MIN(widthRatio, heightRatio);
float imageWidth = scale * imageView.image.size.width;
float imageHeight = scale * imageView.image.size.height;
于 2013-02-01T15:31:31.360 回答
1

Swift 中的解决方案:

let currentHeight = imageView.bounds.size.height
let currentWidth = imageView.bounds.size.width
let newWidth = UIScreen.mainScreen().bounds.width
let newHeight = (newWidth * currentHeight) / currentWidth

println(newHeight)
于 2015-08-01T09:23:49.997 回答
0

它具有原始图像的参考,因此始终提供与原始图像相同的尺寸。

要获得新图像的尺寸,您必须检查纵横比。我已经使用预览使用不同大小的不同图像导出了一个公式来满足我的需要,它如何根据图像的纵横比调整图像大小。

于 2013-02-01T14:05:45.620 回答
0

根据 Apple 的UIViewContentModeScaleAspectFit文档

它通过保持纵横比来缩放内容(在您的情况下为实际图像)以适合视图的大小(在您的情况下为 attachmentImageNew)。

这意味着您的图像大小(缩放后)应该与您的UIImageView.

更新 :

如果您不想使用UIViewContentModeScaleAspectFit并且可以修复大小,则给您一个新建议,scaledImage那么您可以使用下面的代码来缩放图像以修复 newSize,然后您可以使用代码的宽度。

CGSize newSize = CGSizeMake(100.0,50.0);
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2013-02-01T14:15:42.663 回答
0

在你的情况下:

float yourScaledImageWitdh =  attachmentImageNew.frame.size.height *  attachmentImageNew.image.size.width / attachmentImageNew.image.size.height
NSLog(@"width of resized pic is %f", yourScaledImageWitdh);

但你也应该检查一下,原始图像比例与imageView比例,我的代码行是好的,以防红色区域水平添加,而不是你的原始图像比例比imageView帧比例宽

于 2013-02-01T14:41:51.087 回答
0

对于Swift 2,您可以使用此代码片段将aspectFitted图像与屏幕底部对齐(从该问题的早期答案中采样 -> 感谢你们,伙计们)

let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = CGFloat(screenSize.width)
let screenHeight = CGFloat(screenSize.height)

imageView.frame = CGRectMake(0, screenHeight - (imageView.image?.size.height)! , screenWidth, (imageView.image?.size.height)!)

let newSize:CGSize = getScaledSizeOfImage(imageView.image!, toSize: self.view.frame.size)

imageView.frame = CGRectMake(0, screenHeight - (newSize.height) , screenWidth, newSize.height)

func getScaledSizeOfImage(image: UIImage, toSize: CGSize) -> CGSize       
{
    let widthRatio = toSize.width/image.size.width
    let heightRatio = toSize.height/image.size.height
    let scale = min(widthRatio, heightRatio)
    let imageWidth = scale*image.size.width
    let imageHeight = scale*image.size.height
    return CGSizeMake(imageWidth, imageHeight)
}
于 2015-11-04T10:23:10.933 回答