我正在尝试使用以下代码扩展UIImage:
UIImage *stretchyImage = [[UIImage imageNamed:@"Tag@2x.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
UIImageView *newTag = [[UIImageView alloc] initWithImage:stretchyImage];
拉伸前的图像如下所示:
之后,看起来像这样:
为什么伸缩不能正常工作?角落都变得像素化并且看起来很拉伸,而事实上只有中间应该被拉伸。仅供参考:我在iOS 6上运行此应用程序。
答案 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倍。