我有一个 CALayer,我想向其中添加一个可拉伸的图像。如果我只是这样做:
_layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage;
它不会工作,因为图层的默认 contentGravity 是 kCAGravityResize。
我读到这可以使用内容中心来完成,但我似乎无法弄清楚如何使用它来在我的 CALayer 中实现拉伸图像。
欢迎任何想法!
Horatiu
对于这个问题的回答是这样的。假设您有一个可拉伸图像,它仅在宽度上拉伸,并且高度固定(为了简单起见)。
图像宽度为 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),导致整个图像被缩放。如果矩形延伸到单位矩形之外,则结果未定义。
就是这个。希望其他人会发现这很有用,并且会节省一些开发时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)