UIEdgeInsetsMake 是如何工作的?

时间:2023-03-24
本文介绍了UIEdgeInsetsMake 是如何工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I'm making an app where I use UIEdgeInsetsMake for resizableImageWithCapInsets, but I don't understand how does it works exactly, UIEdgeInsetsMake has 4 arguments:

  • 顶部
  • 底部

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

But they're floats so I don't know how to set that to an image, thanks! :D

推荐答案

根据文档:

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

You use this method to add cap insets to an image or to change the existing cap insets of an image. In both cases, you get back a new image and the original image remains untouched.

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

During scaling or resizing of the image, areas covered by a cap are not scaled or resized. Instead, the pixel area not covered by the cap in each direction is tiled, left-to-right and top-to-bottom, to resize the image. This technique is often used to create variable-width buttons, which retain the same rounded corners but whose center region grows or shrinks as needed. For best performance, use a tiled area that is a 1x1 pixel area in size.

所以您只需要在 UIEdgeInsetsMake 函数的值中使用您想要使其不可拉伸的像素数量.

So you only need to use the amount of pixels you want to make unstretchable in the values of the UIEdgeInsetsMake function.

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

Say you have an image of 21x50 points (21x50 pixels in standard definition, 42x100 pixels in Retina "@2x" definition) and want this image to be horizontally stretchable, keeping the 10 points on the left and on the right untouched when stretching the image, but only stretch the 1-point-wide band in the middle. Then you will use UIEdgeInsetsMake(0,10,0,10).

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

Don't bother that they are floats (that's useful for subpixelling resizing for example, but in practice you will probably only use integers (or floats with no decimal parts)

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

Be careful, this is an iOS5+ only method, not available prior iOS5. If you use pre-iOS5 SDK, use stretchableImageWithLeftCapWidth:topCapHeight: instead.

一些提示我使用了一段时间,因为我不记得 UIEdgeInsets 结构的字段的顺序是什么 - 以及我们应该以什么顺序将参数传递给 UIEdgeInsetsMake 函数 — 我更喜欢使用 指定初始化"语法如下:

Some tip I use since some time, as I never remember in which order the fields of the UIEdgeInsets structure are — and in which order we are supposed to pass the arguments to UIEdgeInsetsMake function — I prefer using the "designated inits" syntax like this:

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

或者当需要显式转换时:

Or when an explicit cast is needed:

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

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

I find it more readable, especially to be sure we don't mix the different borders/directions!

这篇关于UIEdgeInsetsMake 是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:UIProgressView 和自定义跟踪和进度图像(iOS 5 属性) 下一篇:图标已经包含光泽效果

相关文章