私の見解で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
グラフィックス コンテキストの深さを変更する方法がわかりません。また、可能かどうかもわかりません。