drawInRect:boxRect vs CGContextDrawImage

时间:2013-06-11 06:17:16

标签: iphone ios image-resizing

我试图制作一张可调整大小的图片,但无法弄清楚这一点。 当我使用

UIImage *bgImage = [[UIImage imageNamed:@"logout-bg"] resizableImageWithCapInsets:UIEdgeInsetsMake(50, 50, 50, 50)];
[bgImage drawInRect:boxRect];

它提供以下输出
enter image description here

而不是调整大小会破坏图像。

但如果我使用

UIImage *bgImage = [[UIImage imageNamed:@"logout-bg"] resizableImageWithCapInsets:UIEdgeInsetsMake(50, 50, 50, 50)];
CGContextDrawImage(context, boxRect, bgImage.CGImage);

它提供以下输出
enter image description here
现在而不是调整其拉伸图像的大小。

我通过互联网搜索但无法解决我的问题。谁能帮我。请注意我不想在任何子视图中添加它。

我的原始图片是(它具有透明度,为什么它看起来从中间变灰)为enter image description here

1 个答案:

答案 0 :(得分:0)

问题在于插件。您的原始图片 100x100px ,您可以为四个边缘(顶部,左侧,底部,右侧)中的任何一个设置 50px 。这意味着您的图像现在切成这样:

enter image description here

你注意到了什么问题吗?没有什么可重复的!

因此,如果我们渲染图像,我们就会得到这个:

enter image description here

现在我们真正想要的是制作插图,以便我们保持圆角并重复其他所有内容。这样的事情(这是 20px 插入):

enter image description here

当然,在呈现时,我们可以获得所需的结果:)

enter image description here

所以唯一需要改变的是:

UIImage *bgImage = [[UIImage imageNamed:@"logout-bg"]
    resizableImageWithCapInsets:UIEdgeInsetsMake(20, 20, 20, 20)];