将 UIImages 高度缩放到 UIImageView 高度
Posted
技术标签:
【中文标题】将 UIImages 高度缩放到 UIImageView 高度【英文标题】:Scale UIImages height to UIImageView height 【发布时间】:2013-08-13 17:41:35 【问题描述】:我正在创建一个 ios 应用程序,其中的图像比我的 UIImageView 大。我想缩放这些图像,使图像高度与图像视图高度相同。图像不会被剪裁在两侧,而只会被剪裁在一侧。如何缩放 UIImages? UIViewContentModeScaleAspectFit 适合最长端,因此整个图像都在屏幕上,但我希望它适合高度而不是最长端。
【问题讨论】:
你在storyboard中插入了UIImageView吗? 它是 100% 以编程方式创建的,是的,我确实看到了图像,但它非常大。 你是什么意思,你“希望它适合高度而不是最长端”?不管你想让高度完全填满整个屏幕,但如果它在宽度上被截断也没关系? @WendiKidd 是的,我希望它始终填满高度,但如果宽度被切断也可以 【参考方案1】:试试这个代码,
//find out the width and height ratio of your image.
double ratio = [UIImage imageNamed:@"Your_image.png"].size.width / [UIImage imageNamed:@"Your_image.png"].size.height;
//determine the calculate width according the height. here height is set as 568.
double calculatedWidth = ratio * 568;
float xPosition = 0.0;
//if calculated width is greater than the screen width than we need to change the starting position which was set to 0 initially.
if (calculatedWidth > [UIScreen mainScreen].bounds.size.width)
xPosition = (calculatedWidth - [UIScreen mainScreen].bounds.size.width) * - 1;
//initiate your image view here.
UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(xPosition, 0, calculatedWidth, 568)];
yourImageView.image = [UIImage imageNamed:@"Your_image.png"];
[self.view addSubview:yourImageView];
【讨论】:
我让它适合屏幕,但我希望它适合高度而不是较长的一端。 你能解释更多吗?比如你的图像分辨率是多少,你的图像视图的框架是什么。而你真正想要的。 UIViewContentModeScaleAspectFit 将始终保持分辨率并相应地适合视图。 设备:iphone5 图像:3000 像素 x 2000 像素图像视图:640 像素 x 1136 像素。我希望 2000px 缩放到 1136,然后 3000 会比屏幕大。 然后使用 contentModeUIViewContentModeScaleAspectFill
。【参考方案2】:
如果您只想使高度完全适合图像视图,则需要进行一些数学运算以找出合适的宽度比。试试这个:
float maxHeight = 480.0f; //this is the height of your container view.
float origHeight = imageView.frame.size.height;
float origWidth = imageView.frame.size.width;
//at this point we can create a proportion.
//origHeight / origWidth = maxHeight / X (where X = the new width)
//divide the expression by maxHeight and you can solve for the new width:
float newWidth = (origHeight / origWidth) / maxHeight;
此时您已经有了制作图像所需的尺寸;您总是希望高度与 maxHeight 相同,并且您已经完成了数学运算以找出当 height = maxHeight 时与原始图像尺寸成比例的新宽度。
查看this answer here on ***,了解如何调整 UIImageViews 的大小。将该高度和宽度传递给该答案中的函数。一切都会好起来的!
【讨论】:
【参考方案3】:您可以通过以下方式获得您想要的东西:
// Set image view to clip to bounds
self.imageView.clipToBounds = YES;
// Calculate aspect ratio of image
CGFloat ar1 = self.imageView.image.size.width / self.imageView.image.size.height;
// Calculate aspect ratio of image view
CGFloat ar2 = self.imageView.frame.size.width / self.imageView.frame.size.height;
// Set fill mode accordingly
if (ar1 > ar2)
self.imageView.contentMode = UIViewContentModeScaleAspectFill;
else
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
【讨论】:
以上是关于将 UIImages 高度缩放到 UIImageView 高度的主要内容,如果未能解决你的问题,请参考以下文章
Android ImageView 将较小的图像缩放到具有灵活高度的宽度,而不会裁剪或扭曲