为什么UIImage不能正常拉伸?

时间:2012-12-12 20:41:07

标签: iphone objective-c ios uiimageview uiimage

我正在尝试使用以下代码扩展UIImage:

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

拉伸前的图像如下所示:

enter image description here

之后,看起来像这样:

enter image description here

为什么伸缩不能正常工作?角落都变得像素化并且看起来很拉伸,而事实上只有中间应该被拉伸。仅供参考:我在iOS 6上运行此应用程序。

1 个答案:

答案 0 :(得分:3)

为什么你的实现不起作用因为你给 stretchableImageWithLeftCapWidth:topCapHeight:方法的值

首先,iOS 6不推荐使用 stretchableImageWithLeftCapWidth:topCapHeight:。新的API是resizableImageWithCapInsets:

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

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

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

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

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

应该做的伎俩。 此外,当你摆脱文件扩展名&时,-imageNamed工作正常。 @ 2倍。