如何增加可拉伸的UIImage在CALayer.contents?(How to add Stret

2019-07-30 16:52发布

我有一个CALayer的,我想给它添加一个伸展的形象。 如果我只是做:

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

它不会工作,因为图层的默认contentGravity是kCAGravityResize。

我读过,这可以使用contentsCenter来完成,但我似乎无法弄清楚到底如何我会用它来实现扩张的图象在我的CALayer。

任何想法,欢迎!

霍拉丘

Answer 1:

对这个问题的回应是这一个。 比方说您有伸展仅在宽度,并且具有固定的高度(为简单起见)的可拉伸图像。

该图像是31px宽度(15像素固定大小 - 不拉伸 - ,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)被缩放。 如果矩形的单位矩形外侧延伸的结果是不确定的。

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



文章来源: How to add Stretchable UIImage in the CALayer.contents?