レイヤーの 3 つの兄弟サブレイヤーをインスタンス化する UIView サブクラスがあります。サブレイヤーのうち 2 つは、コンテンツが画像ファイルに設定されています。3つ目はグラフィックが描かれています
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
方法。問題は、描画レイヤーが常に画像レイヤーの背後に表示されることです。サブレイヤー配列の順序を変更し、サブレイヤーの zPosition プロパティを変更しようとしましたが、役に立ちませんでした。私は何が欠けていますか?
- (void)setupLayers
{
CALayer *rootLayer = [self layer];
_meterLayer = [CALayer layer];
[_meterLayer setContents:(id)[[UIImage imageNamed:@"HealthMeterRadial60x60.png"] CGImage]];
_pointerLayer = [CALayer layer];
[_pointerLayer setContents:(id)[[UIImage imageNamed:@"HealthMeterRadialPointer60x60.png"] CGImage]];
_labelLayer = [CALayer layer];
[self set_labelText:@"Health"];
[rootLayer addSublayer:_meterLayer];
[rootLayer insertSublayer:_pointerLayer above:_meterLayer];
[rootLayer insertSublayer:_labelLayer above:_pointerLayer];
}
そして drawLayerInContext メソッド:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
if( layer = _labelLayer) {
//draw graphics ... omitted for clarity; works, but always behind images
}
}