UIImageView中的UIImage大小

我有一些UIImage并显示在UIImageView

我需要使用UIViewContentModeScaleAspectFit内容模式。

这里是简单的代码:

 UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; imageView.image = self.image; imageView.contentMode = UIViewContentModeScaleAspectFit; [self.view addSubview:imageView]; [imageView release]; 

如何知道屏幕上显示的图像大小? 有没有解决scheme,属性或我应该手动计算?

编辑:

我知道关于财产image.size

self.image.size – >>>原始图像大小

imageView.image.size – >>> imageView.image.size大小,但不是显示的图像。

我问的显示大小取决于imageView's size和它的contentmode

以下是UIImageView中的一个类别,您可以使用该类别来基于图像视图上设置的UIViewContentMode来反思所显示图像的边界:

 @implementation UIImageView (JRAdditions) - (CGRect)displayedImageBounds { UIImage *image = [self image]; if(self.contentMode != UIViewContentModeScaleAspectFit || !image) return CGRectInfinite; CGFloat boundsWidth = [self bounds].size.width, boundsHeight = [self bounds].size.height; CGSize imageSize = [image size]; CGFloat imageRatio = imageSize.width / imageSize.height; CGFloat viewRatio = boundsWidth / boundsHeight; if(imageRatio < viewRatio) { CGFloat scale = boundsHeight / imageSize.height; CGFloat width = scale * imageSize.width; CGFloat topLeftX = (boundsWidth - width) * 0.5; return CGRectMake(topLeftX, 0, width, boundsHeight); } CGFloat scale = boundsWidth / imageSize.width; CGFloat height = scale * imageSize.height; CGFloat topLeftY = (boundsHeight - height) * 0.5; return CGRectMake(0, topLeftY, boundsWidth, height); } @end 

与@ jacob-relkin一样迅速

 extension UIImageView { func displayedImageBounds() -> CGRect { let boundsWidth = bounds.size.width let boundsHeight = bounds.size.height let imageSize = image!.size let imageRatio = imageSize.width / imageSize.height let viewRatio = boundsWidth / boundsHeight if ( viewRatio > imageRatio ) { let scale = boundsHeight / imageSize.height let width = scale * imageSize.width let topLeftX = (boundsWidth - width) * 0.5 return CGRectMake(topLeftX, 0, width, boundsHeight) } let scale = boundsWidth / imageSize.width let height = scale * imageSize.height let topLeftY = (boundsHeight - height) * 0.5 return CGRectMake(0,topLeftY, boundsWidth,height) } } 

这是不可能的。 您可以通过以下方法获取原始图像大小

 UIImage *image = imageView.image; CGSize size = image.size; 

尺寸

图像的尺寸,考虑到方向。 (只读)

 @property(nonatomic, readonly) CGSize size 

你也可以通过使用下面的方法得到它:

 -(CGSize)imageSizeAfterAspectFit:(UIImageView*)imgview{ float newwidth; float newheight; UIImage *image=imgview.image; if (image.size.height>=image.size.width){ newheight=imgview.frame.size.height; newwidth=(image.size.width/image.size.height)*newheight; if(newwidth>imgview.frame.size.width){ float diff=imgview.frame.size.width-newwidth; newheight=newheight+diff/newheight*newheight; newwidth=imgview.frame.size.width; } } else{ newwidth=imgview.frame.size.width; newheight=(image.size.height/image.size.width)*newwidth; if(newheight>imgview.frame.size.height){ float diff=imgview.frame.size.height-newheight; newwidth=newwidth+diff/newwidth*newwidth; newheight=imgview.frame.size.height; } } NSLog(@"image after aspect fit: width=%f height=%f",newwidth,newheight); return CGSizeMake(newwidth, newheight); }