Ich kann nicht herausfinden, warum die CALayers, die ich erstelle, ihre drawLayer-Methode nicht aufrufen. Ich habe ein DrawLayer-Delegat-Objekt für sie erstellt, aber es wird nie aufgerufen. Aus einer UIView Unterklasse:CALayers ruft niemals die drawLayer des Delegates auf: inContext: selbst nach [layer setNeedsDisplay] und [layer display]
- (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;
}
In self.drawer ich habe:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
NSLog(@"layer called drawLayer");
// Some drawing goes here
}
ich viele verschiedene Dinge ausprobiert habe. Ich habe versucht setNeedsDisplay auf self.bg.layer, ich habe setNeedsDisplay auf self.bg versucht, ich habe [layer setNeedsDisplay] vor und nach dem addSublayer versucht, ich habe [layer display] vor und nach addSublayer versucht. Ich habe es mit und ohne [layer display] und [layer displayIfNeeded] ausprobiert.
Warum weigert sich die Schicht zu zeichnen?
Ich wusste nicht über diese Methode. Ich lege es in meinen Delegierten und es wird tatsächlich angerufen. DrawLayer wird jedoch immer noch nicht aufgerufen. Soll ich es manuell von displayLayer aufrufen? – zakdances
nicht meine aktualisierte Antwort lesen. – msk
Wenn keine displayLayer-Methode definiert wurde, wurde das Problem nicht gelöst. Aber ich habe es herausgefunden. Siehe meine Antwort oben. – zakdances