2013-10-08 27 views
2

我有图像,并且在该图像中我想重复水平线和垂直线,因此我扩展了我的图像。在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 

,我希望它是:

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

我再说一遍,是上线40对图像的所有像素,我想这样做对任意数量的图像。

+1

请用屏幕截图添加更多细节.... – Spynet

+1

您能张贴图像吗? – neilco

回答

1

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

(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets

UIEdgeInsets是结构,用于指定每个帽 插图浮点值:顶部,左侧,底部和右侧区域的图像。要为按钮应用此 形象,这里就是我们需要做的事情:

UIImage *buttonImage = [[UIImage imageNamed:@"blueButton"] 
    resizableImageWithCapInsets:UIEdgeInsetsMake(0, 16, 0, 16)]; 

这要求左,原始图像 的右侧16个像素不进行缩放或调整大小时拉伸图像以适应上面定义的 按钮大小框架。结束

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

查看here了解更多详情。

8

实现您想要的结果的关键是resizableImageWithCapInsets: on UIImage。例如,50像素图像采取以下50像素(注:这是@ 2X版本):

Retina-scale 50x50 image with a single pixel vertical red line offset by 15px in the x-axis

如果想舒展红线水平,首先要定义UIEdgeInset描述的位置红色线条:

UIEdgeInsets redLine = UIEdgeInsetsMake(0, 15, 0, 34); 

这定义了一个从左边起偏移15px的图像的一个像素宽的切片。 right偏移量为34,因为可拉伸切片的右边缘位于16px,而50(图像宽度)减16是34。

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

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

UIImage *stretchableImage = [[UIImage imageNamed:@"my_image"] resizableImageWithCapInsets:redLine]; 

我们可以用我们所需要的帧分配此stretchableImageUIImageView

在应用中,stretchedImageView看起来就像这样:

enter image description here

有一个称为resizableImageWithCapInsets:resizingMode:另一种方法,你平铺的形象片,而不是拉伸它,所以你可以做疯狂的事情一样采取这种图像可以:

enter image description here

和瓷砖它水平这样:

enter image description here

0

只是重复的图像中的UIImageView像这样:

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

    return view 
}()