2

我正在尝试使用以下代码拉伸 UIImage:

UIImage *stretchyImage = [[UIImage imageNamed:@"Tag@2x.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
UIImageView *newTag = [[UIImageView alloc] initWithImage:stretchyImage];

拉伸前的图像是这样的:

在此处输入图像描述

之后,看起来像这样:

在此处输入图像描述

为什么拉伸没有正常工作?角落都已经像素化并且看起来被拉伸了,而实际上只有中间应该被拉伸。仅供参考:我在 iOS 6 上运行这个应用程序。

4

1 回答 1

3

为什么您的实现不起作用是因为您为stretchableImageWithLeftCapWidth:topCapHeight:方法提供的值。

首先,stretchableImageWithLeftCapWidth:topCapHeight:在 iOS 6 中被弃用。新的 API 是 resizableImageWithCapInsets:

图像在顶部、底部和右侧具有不可拉伸的部分。您告诉 API 的是“从左侧获取 -10,根据我给您的尺寸拉伸其余部分”。

由于您在右侧有一个不可重复的自定义形状,无论是高度还是宽度,我们应该将该部分作为一个整体。

所以顶盖宽度应该是图像的高度(以保持右侧物体的形状),左盖宽度应该是〜20像素(圆角矩形角),底盖可以是0,因为顶部cap 是整个图像的高度,最后右 cap 应该是右侧自定义橙色形状的宽度(我将其设为 ~40 像素)。

您可以使用上限值并获得更好的结果。

UIImage *image = [UIImage imageNamed:@"Tag"];
UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(image.size.height, 20, 0, 40)];

应该做的伎俩。此外,当您摆脱文件扩展名和@2x 时,-imageNamed 可以正常工作。

于 2012-12-12T20:55:50.007 回答