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

在iOS上扩展图像重复水平线和重复垂直线,ios,uiimage,stretch,Ios,Uiimage,Stretch,我有一个图像,在这个图像中我想重复水平线和垂直线,所以我扩展了我的图像 例如,我有图像50X50,我希望它是50x70,通过重复x=15行。这在iOS上可能吗 编辑: 好的,我会尽量说清楚的。我有图像60x60,基本上是矩形,宽60,高60。现在我想通过重复x=40的pixles,将该图像拉伸为80x60。或者简单地说,我有: 123456 1 XXXAXX 2 XXXAXX 3 XXXAXX 4 XXXAXX 5 XXXAXX 6 XXXAXX 我希望它是: 12345678 1 X

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

例如,我有图像50X50,我希望它是50x70,通过重复x=15行。这在iOS上可能吗

编辑:

好的,我会尽量说清楚的。我有图像60x60,基本上是矩形,宽60,高60。现在我想通过重复x=40的pixles,将该图像拉伸为80x60。或者简单地说,我有:

  123456
1 XXXAXX
2 XXXAXX
3 XXXAXX
4 XXXAXX
5 XXXAXX
6 XXXAXX
我希望它是:

  12345678
1 XXXAAAXX
2 XXXAAAXX
3 XXXAAAXX
4 XXXAAAXX
5 XXXAAAXX
6 XXXAAAXX

我重复图像上第40行的所有像素。我想在任意数量的图像上进行此操作。

如果我正确理解此问题,您应该使用:

(UIImage*)可调整大小的带capInsets的图像:(UIEdgeInsets)capInsets

UIEdgeInsets是为每个cap指定浮点值的结构 插图:图像的顶部、左侧、底部和右侧区域。适用于 按钮的图像,我们需要做的就是:

这要求原始图像的左右16个像素 拉伸图像以容纳图像时,不会缩放或调整大小 上面定义的按钮大小框架。结局

OBS:这只适用于普通图像,例如,带有渐变的图像将无法正常工作


查看更多详细信息。

实现所需结果的关键是
调整图像大小,带capinsets:
打开
UIImage
。例如,以下面的50px×50px图像为例(注意:这是@2x版本):

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

UIEdgeInsets redLine = UIEdgeInsetsMake(0, 15, 0, 34);
这定义了从左侧偏移15px的一个像素宽的图像切片。
right
偏移量为
34
,因为可拉伸切片的右边缘为16px,50(图像宽度)减去16为34

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

UIImage *stretchableImage = [[UIImage imageNamed:@"my_image"] resizableImageWithCapInsets:redLine];
我们可以将此
拉伸图像
分配给带有所需帧的
UIImageView

UIImageView *stretchedImageView = [[UIImageView alloc] initWithImage:stretchableImage];
stretchedImageView.frame = CGRectMake(100,100,70,50); // The image view is 70px wide
在应用程序中,
stretchedImageView
将如下所示:

var dottedLineView : UIImageView = {
    let view = UIImageView()
    view.contentMode = .scaleAspectFill
    view.clipsToBounds = true
    view.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "dashedLine"))

    return view
}()

还有另一种方法称为
resizebleimagewithcapinsets:resizengmode:
,它允许您平铺图像切片,而不是拉伸它,因此您可以做一些疯狂的事情,例如拍摄此图像:

然后像这样水平平铺:

var dottedLineView : UIImageView = {
    let view = UIImageView()
    view.contentMode = .scaleAspectFill
    view.clipsToBounds = true
    view.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "dashedLine"))

    return view
}()

只需在UIImageView中重复一个图像,如下所示:

var dottedLineView : UIImageView = {
    let view = UIImageView()
    view.contentMode = .scaleAspectFill
    view.clipsToBounds = true
    view.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "dashedLine"))

    return view
}()

请添加更多的细节与屏幕截图…你可以请张贴的图像?