在iOS上扩展图像重复水平线和重复垂直线

Meg*_*anX 2 stretch uiimage ios

我有图像,在那个图像中我想重复水平和垂直线,所以我扩展我的图像.

例如,我有50X50的图像,我希望它是50x70,重复行x = 15.这在iOS上是否可行?

编辑:

好的,我会试着更清楚.我有图像60x60,基本上是矩形,宽度为60,高度为60.现在我想通过重复x = 40的像素将图像拉伸为80x60.或者简单地绘制它,我有:

  123456
1 XXXAXX
2 XXXAXX
3 XXXAXX
4 XXXAXX
5 XXXAXX
6 XXXAXX
Run Code Online (Sandbox Code Playgroud)

我希望它是:

  12345678
1 XXXAAAXX
2 XXXAAAXX
3 XXXAAAXX
4 XXXAAAXX
5 XXXAAAXX
6 XXXAAAXX
Run Code Online (Sandbox Code Playgroud)

我重复了40号线上图像上的所有像素.我想在任意数量的图像上进行.

nei*_*lco 8

实现你想要的结果的关键是resizableImageWithCapInsets:UIImage.例如,采用以下50px x 50px图像(注意:这是@ 2x版本):

Retina-scale 50x50图像,单像素垂直红线在x轴上偏移15px

如果要将红线水平拉伸,首先要定义一条UIEdgeInset描述红线位置的红线:

UIEdgeInsets redLine = UIEdgeInsetsMake(0, 15, 0, 34);
Run Code Online (Sandbox Code Playgroud)

这定义了从左侧偏移15px的图像的一个像素宽的切片.该right偏移量是34因为可伸展片的右边缘位于16px的和50(图像宽度)减去16是34.

现在我们有了UIEdgeInset,我们可以加载图像并创建它的可伸缩版本:

UIImage *stretchableImage = [[UIImage imageNamed:@"my_image"] resizableImageWithCapInsets:redLine];
Run Code Online (Sandbox Code Playgroud)

我们可以使用我们需要的框架将其指定stretchableImage给a UIImageView:

UIImageView *stretchedImageView = [[UIImageView alloc] initWithImage:stretchableImage];
stretchedImageView.frame = CGRectMake(100,100,70,50); // The image view is 70px wide
Run Code Online (Sandbox Code Playgroud)

在应用程序中,stretchedImageView将如下所示:

在此输入图像描述

还有另一个方法叫做resizableImageWithCapInsets:resizingMode:允许你平铺图像切片而不是拉伸它,所以你可以做一些疯狂的事情,比如拍这个图像:

在此输入图像描述

并像这样平铺它:

在此输入图像描述