60

我正在制作一个我使用的应用程序UIEdgeInsetsMakeresizableImageWithCapInsets但我不明白它是如何工作的,UIEdgeInsetsMake有 4 个参数:

  • 最佳
  • 剩下
  • 底部

但是它们是浮动的,所以我不知道如何将其设置为图像,谢谢!:D

4

3 回答 3

70

根据文档:

您可以使用此方法将大写插图添加到图像或更改图像的现有大写插图。在这两种情况下,您都会返回一个新图像,而原始图像保持不变。

在图像的缩放或调整大小期间,被帽子覆盖的区域不会被缩放或调整大小。相反,每个方向上未被帽覆盖的像素区域从左到右和从上到下平铺,以调整图像大小。这种技术通常用于创建可变宽度按钮,这些按钮保留相同的圆角,但其中心区域会根据需要增大或缩小。为获得最佳性能,请使用大小为 1x1 像素区域的平铺区域。

因此,您只需要在函数的值中使用要使其不可拉伸的像素数量UIEdgeInsetsMake

假设您有一个 21x50 点的图像(标准清晰度为 21x50 像素,Retina "@2x" 定义为 42x100 像素)并希望此图像可水平拉伸,在拉伸图像时保持左侧和右侧的 10 个点不变,但仅在中间拉伸 1 点宽的频带。然后你将使用UIEdgeInsetsMake(0,10,0,10).

不要担心它们是浮点数(例如,这对于亚像素调整大小很有用,但实际上您可能只会使用整数(或没有小数部分的浮点数)

请注意,这是 iOS5+ 独有的方法,在 iOS5 之前不可用。如果您使用 iOS5 之前的 SDK,请stretchableImageWithLeftCapWidth:topCapHeight:改用。


[编辑] 我从一段时间以来使用的一些技巧,因为我不记得UIEdgeInsets结构的字段的顺序 - 以及我们应该将参数传递给UIEdgeInsetsMake函数的顺序 - 我更喜欢使用这样的“指定初始化”语法

UIEdgeInsets insets = { .left = 50, .right = 50, .top = 10, .bottom = 10 };

或者当需要显式转换时:

UIImage* rzImg = [image resizableImageWithCapInsets:(UIEdgeInsets){
   .left = 50, .right = 50,
   .top = 10, .bottom = 10
}];

我发现它更具可读性,尤其是要确保我们不会混合不同的边界/方向!

于 2011-10-02T17:40:01.430 回答
10

但它们是浮动的,所以我不知道如何将其设置为图像

这是一个 UIImage 实例方法。因此,您resizableImageWithCapInsets在图像中创建的方式是首先将该消息发送图像(UIImage)。

很酷的新功能:请注意,如果边缘插入全部为零,则图像将被平铺。这可以作为任何接受背景图像的背景。它甚至可以在 UIImageView 中使用。

于 2011-11-02T16:42:04.783 回答
3

我刚刚浏览了这篇文章,它清除了我所有关于UIEdgeInsetsMake

iOS:如何使用 UIEdgeInsetsMake 制作可伸缩按钮

于 2014-03-04T13:46:09.800 回答