更改 UIImageView 或 UIImage 宽度

Posted

技术标签:

【中文标题】更改 UIImageView 或 UIImage 宽度【英文标题】:Change UIImageView or UIImage width 【发布时间】:2014-05-14 02:39:14 【问题描述】:

我有 2 张纯色(绿色和橙色)的图像(280x20 像素),我将橙色放在绿色的后面。我想要的是在宽度上调整或拉伸(向下)绿色。我不在乎质量下降,图片是纯色的。

为什么?它们将代表数据,如果我有 50%-50% 的分布,我希望绿色的分布为 140x20。通过这种方式,我们可以借助图像(类似于条形图)的视觉帮助来理解两个图像具有相同的大小。如果数据是 75%-25%,我希望绿色的宽度为 (280*0.75),这一次显示为 3:1 的比例。请注意,我不会调整橙色图像的大小,她将停留在绿色图像的后面,用户将看到绿色图像没有覆盖的内容。

我对数据的比例进行任何计算都没有问题。 我的问题是处理图像缩放/拉伸/等。我尝试了以下方法:

//imageView is the imageView representing the "green image bar"
UIImageView* imageView = (UIImageView*) [cell viewWithTag:202];
double scale = 0.75;
CGRect frame = imageView.frame;
imageView.frame = CGRectMake(frame.origin.x, frame.origin.y, 280*scale, frame.size.height);

我曾经通过实际调整 UIImageView 的大小来取得一些进展,但位置是相同的。导致图像(现在宽度更小)显示为“移动”到右侧,我希望该图像保持原来的左对齐,但宽度更小。

在故事板中,它位于原型单元格内,这就是我通过标签获得 UIImageView 的原因。还尝试了几乎所有模式(故事板上属性选项卡中的视图->模式),目前有“缩放填充”,目前无法正常工作。

我应该在 UIImageView 中调整 UIImage 的大小吗?我应该调整整个 UIImageView 的大小吗?希望有人可以帮助我在这方面的良好做法,谢谢! :D

PS:会发布一些截图,但声望不够:(

【问题讨论】:

【参考方案1】:

如果您只是使用纯色,那么只需使用UIView 并设置backgroundColor 属性。为此目的使用图像会使事情变得不必要地复杂化,此外,UIImageViewUIView 的子类,因此唯一添加的功能将与您不需要的东西有关。

既然我们已经决定使用UIViews 而不是图像,您就不必再担心UIViewContentMode(或用于填充废话的比例)。只需相应地更改视图的sizeorigin 属性。

为此目的使用视图而不是图像的示例:(我不能保证语法,因为我不是在我的 Mac 上编写的)

UIView *greenView = [[UIView alloc] initWithFrame:CGRectMake(0,0,280,20)];
UIView *orangeView = [[UIView alloc] initWithFrame:CGRectMake(0,0,280,20)];

greenView.backgroundColor = [UIColor greenColor];
orangeView.backgroundColor = [UIColor orangeColor];

CGRect newGreenFrame = greenView.frame;
newGreenFrame.size.width = newGreenFrame.size.width * 0.75;

greenView.frame = newGreenFrame;

这是初始化和更改UIViews 的帧的好方法。还有其他更短的方法,但这样可以更容易阅读代码。

【讨论】:

以上是关于更改 UIImageView 或 UIImage 宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中检测 UIImageView 上的 UIImageView 更改或 KVO 炒锅

如何更改UIImage / UIImageView的单个像素的颜色

Swift - 动态更改 UIImageView 的图像

在运行时更改 UIImage 渲染模式

如何旋转 UIImage 或 UIImageView? [复制]

如何保存 UIImage 或 UIImageView 的状态?