获取UIViewContentModeScaleAspectFit后resize的图像的宽度

我有我的UIImageView,我把一个图像,我调整这样的:

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

我试图通过这样做在我的UIImageView获取resize的图片的宽度:

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

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

编辑:这是我的UIImageView看起来,红色区域是它的backgroundColor

在这里输入图像说明

我不知道是否有更明确的解决scheme,但是这个工作:

 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; 

Swift中的一个解决scheme:

 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) 

它有你的原始图像的参考,所以总是给出与原始图像相同的尺寸。

要获得新图像的尺寸,您必须检查宽高比。 我已经根据需要使用不同大小的不同图像导出了一个公式,使用“预览”可以根据图像的高宽比调整图像大小。

根据Apple的UIViewContentModeScaleAspectFit的文档

它通过保持宽高比来缩放内容 (在你的情况下是actualImage)以适应视图的大小(在你的情况下是attachmentImageNew)。

这意味着你的图像大小(缩放后)应该与你的UIImageView相同。

更新:

一个新的build议给你,如果你不想使用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(); 

在你的情况下:

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

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

对于Swift 2 ,你可以使用这个代码片段来将一个aspectFitted图片与屏幕 底部alignment(从这个问题的早期答案中抽样 – >感谢你们,伙计们)

 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) }