27

Android 有一种定义可拉伸图像的好方法,称为九补丁。有关该概念的描述,请参阅这些文档。这个想法是用 1 像素边框围绕 png 图像,您可以在其中定义图像的可拉伸区域和填充尺寸。这绝对是绝妙的,我想在我的 iPhone 应用程序中使用这个想法。在为 UIImage 加载器编写我自己的九个补丁之前,我想我会看看是否已经存在一个。谷歌不返回任何结果,所以我不抱太大希望,但问也无妨,对吧?:-)

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

4

4 回答 4

25

我收到了一封来自 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];
于 2010-06-02T16:46:17.240 回答
4

另请查看 UIView 的 contentStretch 属性。它比stretchableImageWithLeftCapWidth 更健壮且表现良好。基本上,它的工作原理是在图像中定义可拉伸的矩形并自动创建一个缩放的九个补丁。这个内部矩形可以是任何东西——它甚至不必位于图像的中心。此外,与 stretchableImage 不同的是,此方法将正确地缩小图形,并且对具有光照或光泽的图形表现出预期的效果。我想不出任何你想要的实际应用程序。

于 2010-08-13T15:53:28.150 回答
3

UIImage的确实支持类似的东西。看

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

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

于 2009-07-16T02:32:39.763 回答
1

所有UIImage图像都本机支持这一点。默认情况下,整个图像都是可拉伸的,但您可以使用leftCapWidth和属性设置上限,也可以使用方法topCapHeight从现有图像生成一个。UIImage- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight

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

于 2009-08-23T13:45:11.150 回答