Non riesco a capire perché il CALayer che sto creando non stia chiamando il metodo drawLayer. Ho creato un oggetto delegato drawLayer per loro, ma non viene mai chiamato. Da una sottoclasse UIView:I CALayer non chiamano mai drawLayer del delegato: inContext: anche dopo [layer setNeedsDisplay] e [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 ho:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
NSLog(@"layer called drawLayer");
// Some drawing goes here
}
Ho provato molte cose diverse. Ho provato a impostare setNeedsDisplay su self.bg.layer, ho provato setNeedsDisplay su self.bg, ho provato [layer setNeedsDisplay] prima di AND dopo addSublayer, ho provato [layer display] prima e dopo addSublayer. Ho provato con e senza [display layer] e [layer displayIfNeeded].
Perché il layer si rifiuta di disegnare?
Non sapevo di questo metodo. L'ho messo nel mio delegato, e in effetti viene chiamato. tuttavia drawLayer non viene chiamato. Dovrei chiamarlo manualmente da displayLayer? – zakdances
non leggere la mia risposta aggiornata. – msk
Non avendo definito il metodo displayLayer, il problema non è stato risolto. Ma l'ho capito. Vedi la mia risposta sopra. – zakdances