UIEdgeInsets如何工作?

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

  • 最佳
  • 剩下
  • 底部

但他们是浮动的,所以我不知道如何设置图像,谢谢! :d

根据文件:

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

在对图像进行缩放或resize的过程中,不会缩放或resize。 相反,在每个方向上没有被帽覆盖的像素区域被平铺,从左到右和从上到下,以调整图像的大小。 这种技术通常用于创build可变宽度的button,它们保留相同的圆angular,但其中心区域根据需要增长或缩小。 为获得最佳性能,请使用大小为1×1像素区域的平铺区域。

所以你只需要使用你想在UIEdgeInsetsMake函数的值中UIEdgeInsetsMake拉伸的像素的数量。

假设您有21×50点的图像(标准清晰度为21×50像素,Retina“@ 2x”清晰度为42×100像素),并且希望此图像可以水平拉伸,拉伸图像时保持左右10点不变,但只能拉伸中间的1点宽带。 那么你将使用UIEdgeInsetsMake(0,10,0,10)

不要打扰,他们是浮动(这是有用的subpixellingresize例如,但在实践中,你可能只会使用整数(或浮动没有小数部分)

要小心,这是iOS5 +的唯一方法,在iOS5之前是不可用的。 如果你使用pre-iOS5 SDK,请使用stretchableImageWithLeftCapWidth:topCapHeight:


[编辑]我用了一段时间以来的一些提示 ,因为我从来不记得UIEdgeInsets结构的字段顺序是什么 – 我们应该以什么顺序将parameter passing给UIEdgeInsetsMake函数 – 我更喜欢使用“指定inits”语法喜欢这个:

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

或者当需要显式演员时:

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

我觉得它更具可读性,特别是要确保我们不混合不同的边界/方向!

但他们是浮动的,所以我不知道如何设置图像

这是一个UIImage实例方法。 所以,你使用resizableImageWithCapInsets在图像中创build的方式是先发送消息图像(UIImage)。

酷的新function:请注意,如果边缘插图都为零,图像将平铺。 这可以作为任何接受背景图像的背景。 它甚至可以在UIImageView中工作。

我只是通过这篇文章,清除了所有关于UIEdgeInsetsMake概念

iOS:如何使用UIEdgeInsets创build可伸缩button