UIEdgeInsetsMake如何运作?

时间:2011-10-02 17:31:07

标签: ios cocoa-touch ios5 uiimage uiedgeinsets

我正在创建一个应用UIEdgeInsetsMake用于resizableImageWithCapInsets,但我不明白它是如何工作的,UIEdgeInsetsMake有4个参数:

  • 右键

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

3 个答案:

答案 0 :(得分:70)

根据文件:

  

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

     

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

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

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

不要理会它们是浮点数(例如,这对于子数据调整大小有用,但实际上你可能只使用整数(或没有小数部分的浮点数)

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


[编辑]一些提示我用了一段时间,因为我永远不记得UIEdgeInsets结构的字段是以哪种顺序 - 以及我们应该以哪种顺序通过UIEdgeInsetsMake函数的参数 - 我更喜欢使用the "designated inits" syntax这样:

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

或者当需要明确演员时:

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

我发现它更具可读性,特别是为了确保我们不会混合不同的边框/方向!

答案 1 :(得分:10)

  

但他们会漂浮,所以我不知道如何将其设置为图像

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

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

答案 2 :(得分:3)

我只是阅读了这篇文章,清除了我对UIEdgeInsetsMake

的所有概念

iOS: How To Make A Stretchable Button With UIEdgeInsetsMake