3

在我看来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图形上下文的深度,或者是否可能。

4

0 回答 0