Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在层的前面而不是后面绘制NSString(使用drawInRect)?_Iphone_Nsstring_Calayer_Drawrect_Cashapelayer - Fatal编程技术网

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

Iphone 如何在层的前面而不是后面绘制NSString(使用drawInRect)?,iphone,nsstring,calayer,drawrect,cashapelayer,Iphone,Nsstring,Calayer,Drawrect,Cashapelayer,在我的视图的initWithFrame中,我创建一个根层,然后向其中添加一个子层。我设置了子层的路径,这样它就会画出一个彩色框。我希望文本显示在框的顶部,因此在视图的drawRect中,我使用NSString的drawInRect方法来渲染文本,但它总是在框的后面绘制 有没有办法改变深度,以某种方式在彩色框层前面绘制文本 图片: 子层上的低不透明度: 我已经尝试过将CATextLayer添加到子层中—它可以工作,但速度较慢(每个视图都位于UITableViewCell中,并且使用NSString

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

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

图片:

子层上的低不透明度:

我已经尝试过将CATextLayer添加到子层中—它可以工作,但速度较慢(每个视图都位于UITableViewCell中,并且使用NSString drawInRect方法可以更平滑地滚动)


有人知道我在子层上面画线的方法吗?我试着将子层的z位置设置得更低,但没有效果。我不知道如何更改
drawRect
图形上下文的深度,或者如果可能的话。

老实说,当我问这个问题时,我甚至不记得脑子里在想什么。据我所知,由于图层位于视图的顶部,因此绘制到视图上下文的文本将始终显示在图层的后面-因此,要么在drawRect中绘制所需内容(绘制文本之前),而不是使用子图层,或者我认为你可以使用一些委托方法自己在子层中绘制文本:我在绘制线条时遇到了同样的问题。。希望有人能找到解决办法
- (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];    
}