私が作成している CALayer が drawLayer メソッドを呼び出さない理由がわかりません。それらの drawLayer デリゲート オブジェクトを作成しましたが、呼び出されません。UIView サブクラスから:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UIView *bg = [[UIView alloc] initWithFrame:self.bounds];
// I have a property called 'bg' to reference the child UIView
self.bg = bg;
[self addSubview:self.bg];
// an NSObject subclass I use as a CALayer delegate
MyLayerDelegate *drawer = [MyLayerDelegate new];
self.drawer = drawer;
CAGradientLayer *layer = [CAGradientLayer layer];;
layer.delegate = self.drawer;
layer.name = @"bg";
[self.bg.layer addSublayer:layer];
[layer setNeedsDisplay];
[layer display];
}
return self;
}
self.drawer には次のものがあります。
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
NSLog(@"layer called drawLayer");
// Some drawing goes here
}
私は多くの異なることを試しました。私はself.bg.layerでsetNeedsDisplayを設定しようとしました、私はself.bgでsetNeedsDisplayを試しました、私はaddSublayerの前と後に[レイヤーsetNeedsDisplay]を試しました、私はaddSublayerの前後に[レイヤー表示]を試しました。[レイヤー表示]と[レイヤー表示IfNeeded]の有無で試してみました。
レイヤーが描画を拒否するのはなぜですか?