Many thanks, Kyle. That was all the information I needed to make it work. Martin
On 12, Mar, 2011, at 07:28 PM, Kyle Sluder wrote: > On Sat, Mar 12, 2011 at 10:03 AM, Martin Hewitson > <[email protected]> wrote: >> Dear list, >> >> I have a layer backed view whose layer contains many sublayers. The problem >> is that the layer doesn't get drawn in the view when the app starts. If I >> resize the window, then the layer and all its sublayers draw properly. I've >> solved this problem before with what seemed like a magic collection of >> [calayer setNeedsDisplay] and [view setNeedsDisplay:YES], but this time I >> can't seem to get it to work. Therefore, I thought I'd ask if anyone knows >> the correct way to do this. >> >> My view subclass makes its layers like this: >> >> - (void) setupLayers >> { >> NSLog(@"Setting up layers"); >> CALayer *rootLayer = [CALayer layer]; >> rootLayer.layoutManager = [CAConstraintLayoutManager layoutManager]; >> [self setLayer:rootLayer]; >> [self setWantsLayer:YES]; > > You don't have a layer-backed view. You have a layer-hosting view. > This means -setNeedsDisplay: is irrelevant, because -drawRect: doesn't > do anything. > >> yearLayer = [[CAYearLayer alloc] initWithDate:self.year >> dataSource:self.datasource]; >> [rootLayer addSublayer:yearLayer]; >> [rootLayer setNeedsDisplay]; >> [self setNeedsDisplay:YES]; >> } >> >> and the setupLayers is called in awakeFromNib of the view subclass. > > Are you sure that "wants layer" is turned OFF in the nib? IIRC, if > that's turned on, the nib loading machinery will do a delay-perform > that will change your view's layer *after* -awakeFromNib is called. > Since you have a layer-hosting view, you do not want that checkbox > checked. > > Rather than calling -setLayer:, you should probably be overriding > -makeBackingLayer instead. We do that, and then call [self > setWantsLayer:YES] from -viewDidMoveToSuperview. We also call [[self > enclosingScrollView] setWantsLayer:YES], which is required if your > view is contained in a scroll view. > > --Kyle Sluder ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Martin Hewitson Albert-Einstein-Institut Max-Planck-Institut fuer Gravitationsphysik und Universitaet Hannover Callinstr. 38, 30167 Hannover, Germany Tel: +49-511-762-17121, Fax: +49-511-762-5861 E-Mail: [email protected] WWW: http://www.aei.mpg.de/~hewitson ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _______________________________________________ Cocoa-dev mailing list ([email protected]) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [email protected]
