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