iPhone有九个补丁装载机吗?

时间:2009-07-16 00:25:27

标签: android iphone graphics uiimage nine-patch

Android有一种很好的方法来定义称为九补丁的可伸缩图像。有关概念的说明,请参阅these docs。我们的想法是围绕一个带有1像素边框的png图像,您可以在其中定义可伸展区域和图像的填充尺寸。这绝对是非常棒的,我想在我的iPhone应用程序中使用这个想法。在将我自己的9补丁写入UIImage加载器之前,我想我会看看是否已经存在。谷歌没有回复任何结果,所以我没有太多的希望,但问一下并没有坏处,对吧? : - )

编辑:大家好,我很感谢答案,但我知道stretchableImageWithLeftCapWidth...。我正在寻找采用路径@"foo.9.png"并返回可伸展UIImage的代码。这段代码无疑会在内部使用stretchableImageWithLeftCapWidth...。我确信我可以使用该方法自己编写代码。但是我在问其他人是否已经做过了。

4 个答案:

答案 0 :(得分:24)

我收到了来自Tortuga22软件的电子邮件,他告诉我他们已经创建了这样一个库并在Apache许可下发布了它:

公告:http://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/

源代码:http://github.com/tortuga22/Tortuga22-NinePatch

使用示例:

// loads-and-caches ninepatch and rendered image of requested size
UIImage buttonImg = [TUNinePatchCache imageOfSize:buttonSize 
                                forNinePatchNamed:@"buttonNormalBackground"];
[self.buttonNeedingBackground setImage:buttonImg
                       forControlState:UIControlStateNormal];

答案 1 :(得分:4)

另请参阅UIView的contentStretch属性。它比stretchchableImageWithLeftCapWidth更健壮,性能更好。基本上,它只需在图像中定义可伸缩的矩形并自动创建缩放的九个补丁即可。这个内部矩形可以是任何东西 - 它甚至不必位于图像的中心。此外,与stretchchableImage不同,此方法可以正确缩小图形并按照预期的方式对具有光照或光泽的图形进行操作。我想不出任何你需要的实际应用程序。

答案 2 :(得分:3)

UIImage确实支持类似的内容。见

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight以及leftCapWidth和topCapHeight

的文档

基本上图像没有在左边缘和右边缘的leftCapWidth像素区域和顶部和底部的topCapHeight像素中拉伸。缩放图像时,这些限制区域内的区域会受到拉伸。

答案 3 :(得分:1)

所有UIImage张图片本身都支持此功能。默认情况下,整个图片都是可伸缩的,但您可以使用leftCapWidthtopCapHeight属性设置上限,也可以使用UIImage方法从现有- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight生成一个。{ / p>

请注意,在Apple的实现中,当您设置其中一个或两个值时,可伸展区域被强制为高/宽的单个像素。