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