如何在CALayer.contents中添加Stretchable UIImage?

我有一个CALayer,我想添加一个可拉伸的图像。 如果我只是这样做:

_layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage; 

它将不起作用,因为图层的默认contentGravity是kCagravityResize。

我读过这可以使用contentsCenter来完成,但我似乎无法弄清楚我将如何使用它来实现CALayer中的拉伸图像。

任何想法都欢迎!

霍拉丘

对这个问题的回答就是这个。 可以说你有一个可伸缩的图像,只有在宽度上伸展,高度固定(为了简单起见)。

图像是31px宽度(15px固定大小 – 不伸展 – ,1px将被拉伸)

假设你的图层是一个CALayer子类,你的init方法应该如下所示:

  - (id)init { self = [super init]; if (self) { UIImage *stretchableImage = (id)[UIImage imageNamed:@"stretchableImage.png"]; self.contents = (id)stretchableImage.CGImage; self.contentsScale = [UIScreen mainScreen].scale; //<-needed for the retina display, otherwise our image will not be scaled properly self.contentsCenter = CGRectMake(15.0/stretchableImage.size.width,0.0/stretchableImage.size.height,1.0/stretchableImage.size.width,0.0/stretchableImage.size.height); } return self; } 

根据文档contentsCenter矩形必须具有0-1之间的值。

默认为单位矩形(0.0,0.0)(1.0,1.0),导致整个图像缩放。 如果矩形延伸到单位矩形之外,结果是未定义的。

就是这个。 希望别人会觉得这个有用,它会节省一些开发时间。