我正在创建一个应用UIEdgeInsetsMake
用于resizableImageWithCapInsets
,但我不明白它是如何工作的,UIEdgeInsetsMake
有4个参数:
但它们是漂浮的,所以我不知道如何将其设置为图像,谢谢! :d
答案 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