我有一个CALayer,我想添加一个可伸缩的图像。如果我这样做:
_layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage;
它不起作用,因为图层的默认contentGravity是kCAGravityResize。
我已经读过这可以使用contentsCenter完成,但我似乎无法弄清楚我将如何使用它来实现我的CALayer中的拉伸图像。
欢迎任何想法!
霍拉丘
答案 0 :(得分:34)
对这个问题的回答就是这个问题。假设你有一个可拉伸的图像,它只在宽度上伸展并且高度固定(为简单起见)。
图像宽度为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),导致整个图像缩放。如果矩形延伸到单位矩形之外,则结果是未定义的。
就是这样。希望其他人会觉得这很有用,这样可以节省一些开发时间。