【问题标题】:Why won't UIImage stretch properly?为什么 UIImage 不能正确拉伸?
【发布时间】:2012-12-12 20:41:06
【问题描述】:

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

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

拉伸前的图像是这样的:

然后,看起来像这样:

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

【问题讨论】:

  • 您在文件名中包含@2x 的任何原因?你不需要这个,如果设备是视网膜,则会选择正确的图像。
  • 不是真的 - 我会删除它:)
  • @PixelBitAppsLtd 也请删除xcode 标签。

标签: iphone objective-c ios uiimageview uiimage


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • mehtod 显然是更好的选择,因为 steatchable... 已被贬低。但是您确定示例中给出的值吗?我认为这在这种情况下行不通。尤其是顶部和底部的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
相关资源
最近更新 更多