如何在图层前面而不是在后面绘制NSString(使用drawInRect)?

时间:2011-10-19 17:48:02

标签: iphone nsstring calayer drawrect cashapelayer

在我的视图中initWithFrame我创建了一个根层,然后为其添加一个子图层。我设置了子层的路径,因此它将绘制一个彩色框。我希望文本显示在框的顶部,因此在我的视图drawRect中,我使用NSString的drawInRect方法来渲染文本,但它总是在框后面绘制。

有没有办法改变深度以某种方式在彩色框图层前面绘制文字?

图片:http://i.imgur.com/zins6.png

子图层上的不透明度低:http://i.imgur.com/qyJLU.png

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self)
    {
        rootLayer = [CALayer layer];
        rootLayer.frame = self.frame;
        [self.layer addSublayer:rootLayer];

        sublayerPath = CGPathCreateMutable();
        CGPathAddRect(sublayerPath, nil, sublayerRect);
        CGPathCloseSubpath(sublayerPath);

        sublayer = [CAShapeLayer layer];
        sublayer.path = sublayerPath;
        sublayer.fillColor = [[UIColor greenColor] CGColor];
        sublayer.strokeColor = [[UIColor blackColor] CGColor];
        [rootLayer addSublayer:sublayer];

        ...
    }
    return self;
}


- (void)drawRect:(CGRect)rect
{

    ...

    [myString drawInRect:sublayerRect withFont:[UIFont fontWithName:@"Helvetica-Bold" size:21] lineBreakMode:UILineBreakModeTailTruncation alignment:UITextAlignmentCenter];    
}

我已经尝试过将CATextLayer添加到子图层 - 它可以工作,但速度较慢(每个视图都在UITableViewCell中,并且使用NSString drawInRect方法滚动得更顺畅)。

所以有人知道我可以在子图层上绘制字符串的方法吗?我已经尝试将子层的z位置设置得更低而没有效果。我不确定如何更改drawRect图形上下文的深度,或者是否可能。

0 个答案:

没有答案