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

时间:2012-07-31 20:13:19

标签: ios ios5 uiimage calayer quartz-core

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

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

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

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

欢迎任何想法!

霍拉丘

1 个答案:

答案 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),导致整个图像缩放。如果矩形延伸到单位矩形之外,则结果是未定义的。

就是这样。希望其他人会觉得这很有用,这样可以节省一些开发时间。