我有图像,在那个图像中我想重复水平和垂直线,所以我扩展了我的图像。
例如我有图像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号线上图像上的所有像素。我想在任意数量的图像上进行。
答案 0 :(得分:8)
实现所需结果的关键是resizableImageWithCapInsets:
UIImage
。例如,采用以下50px x 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];
我们可以使用我们需要的框架将此stretchableImage
分配给UIImageView
:
UIImageView *stretchedImageView = [[UIImageView alloc] initWithImage:stretchableImage];
stretchedImageView.frame = CGRectMake(100,100,70,50); // The image view is 70px wide
在应用中,stretchedImageView
将如下所示:
还有一种名为resizableImageWithCapInsets:resizingMode:
的方法可以让你平铺图像切片而不是拉伸它,所以你可以做一些疯狂的事情,比如拍下这张图片:
并像这样平铺它:
答案 1 :(得分:1)
如果我正确理解了这个问题,你应该使用:
(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
UIEdgeInsets是指定每个上限的浮点值的结构 插图:图像的顶部,左侧,底部和右侧区域。将此应用于 按钮的图像,这是我们需要做的全部:
UIImage *buttonImage = [[UIImage imageNamed:@"blueButton"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 16, 0, 16)];
这要求原始图像的左右16个像素 拉伸图像以适应时不缩放或调整大小 上面定义的按钮大小框架。结束
OBS:这仅适用于普通图像,例如带有渐变的图像效果不佳。
查看here了解更多详情。
答案 2 :(得分:0)
只需在UIImageView中重复一个图像:
var dottedLineView : UIImageView = {
let view = UIImageView()
view.contentMode = .scaleAspectFill
view.clipsToBounds = true
view.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "dashedLine"))
return view
}()