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