(iphone) adding a shadow to layer -
i'd add shadow uiimageview has image layers.
i've tried self.layer.shadowoffset/shadowopacity route, it's slow..
when want add shadow, call addshadowlayerwithoffset method below expected call drawrect , add shadow..
drawrect isn't getting called.
what missing here?
- (void)drawrect:(cgrect)rect { syslog(log_debug, "in drawrect, isshadowed: %d", isshadowed); if (isshadowed == true) { cgcontextref currentcontext = uigraphicsgetcurrentcontext(); cgcontextsavegstate(currentcontext); cgcontextsetshadow(currentcontext, cgsizemake(100, 100), 3); [super drawrect: rect]; cgcontextrestoregstate(currentcontext); } else [super drawrect: rect]; } - (void) addshadowlayerwithoffset: (int)offset { // self.layer.shadowoffset = cgsizemake(offset,offset); // self.layer.shadowopacity = 0.7f; // self.layer.shadowradius = 5.0; isshadowed = true; [self setneedsdisplay]; }
- edit
ok, got drawlayer being called. needed [self.layer setneedsdisplay] not [self.layer setneedsplay] self uiimageview subclass.
but shadow not being drawn, in fact image(original layer) not shown either.
should change?
- (void) drawlayer: (calayer*) layer incontext: (cgcontextref)context { syslog(log_debug, "in drawlayer, isshadowed: %d", isshadowed); if(isshadowed == true) { cgcontextsavegstate(context); cgcontextsetshadow(context, cgsizemake(10, 10), 3); [super drawlayer: layer incontext: context]; cgcontextrestoregstate(context); } else [super drawlayer: layer incontext: context]; }
you calling:
[super drawrect: rect];
but apple says:
you should never call method directly yourself. invalidate part of view, , cause portion redrawn, call setneedsdisplay or setneedsdisplayinrect: method instead.
instead of drawrect, ever tried drawlayer?
-(void)drawlayer:(calayer *)layer incontext:(cgcontextref)context
Comments
Post a Comment