在iOS上扩展图像重复水平线和重复垂直线
我有一个图像,在这个图像中我想重复水平线和垂直线,所以我扩展了我的图像 例如,我有图像50X50,我希望它是50x70,通过重复x=15行。这在iOS上可能吗 编辑: 好的,我会尽量说清楚的。我有图像60x60,基本上是矩形,宽60,高60。现在我想通过重复x=40的pixles,将该图像拉伸为80x60。或者简单地说,我有:在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
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
}()
请添加更多的细节与屏幕截图…你可以请张贴的图像?