适用于iOS和Swift 3.0的等效Android 9补丁(多个可伸缩区域)

时间:2017-01-08 12:27:29

标签: ios swift image nine-patch stretch

我是Swift和iOS的新手。在Android中,我们可以轻松地拉伸图像并将一些内容放入此图像中,但我找不到任何与iOS相同的内容。

我发现了许多带有resizableImage(withCapInsets)方法的教程/帖子,但它并不是我想要的。看这个图像:

stretchable areas with resizableImage

区域2,4,5,6和8将被拉伸并且仅被拉伸。 使用Android 9补丁,我可以定义多个可伸缩区域,如下所示:

multiple stretchable areas

这里,只有红色区域是可拉伸的。此方法对于保持绿色区域固定非常有用,但resizableImage(withCapInsets)是不可能的。

此外,使用Android 9补丁,我们可以在蓝色区域轻松定义texview,imageview等内容区域,并根据此区域中的文本大小进行图像拉伸。 iOS和Swift有可能吗?

2 个答案:

答案 0 :(得分:5)

据我所知resizableImage(withCapInsets:)是您唯一的内置选项,系统不支持您的第2个具有2个可伸展区域的场景。

the other thread Jon Rose linked to中所述,应该可以使用2张图片视图来实现目标。我建议创建一个UIImageView的子类,它提供这个功能,并在内部将图像分成2个pices,并为两者创建一个单独的可伸缩图像。这不应该那么难。

经过一番谷歌搜索,看起来其他人已经创建了一个iOS 9补丁图像库。查看此链接:https://github.com/andyland/Tortuga22-NinePatch

不幸的是,该回购邮件上的自述文件链接已损坏,因此您必须下载它并四处寻找如何使用它。至于为何将自述文件作为链接而不是内联链接,我不知道。

答案 1 :(得分:0)

您可以将CALayer及其contentsRect与contentsCenter结合使用。 contentCenter定义了水平/垂直拉伸区域的CGRect。根据contentsCenter和contentsRect推断剩余的八个角和单向拉伸边缘。但是我认为这是比android解决方案更复杂的方法。